У меня есть dataframe net
который содержит расстояние d
между двумя местоположениями A
и B
.Python: как сопоставить значения между матрицей и фреймворком данных?
net =
A B d
0 5 3 3.5
1 2 0 2.3
2 3 2 1.2
3 4 5 2.2
4 0 1 3.2
5 0 3 4.5
Тогда я симметричная матрица M
, которая содержит все возможные расстояния между двумя парами, так:
M =
0 1 2 3 4 5
0 0 3.2 2.3 4.5 1.7 5.2
1 3.2 0 2.1 0.7 3.9 3.8
2 2.3 2.1 0 1.2 1.5 4.7
3 4.5 0.7 1.2 0 3.2 3.5
4 1.7 3.9 1.5 3.2 0 2.2
5 5.2 3.8 4.7 3.5 2.2 0
Я хочу, чтобы создать новый dataframe df1
, который содержит две случайных различные мест A
и B
в том же интервале расстояний ds > np.floor(d) & ds < np.floor(d)+1
.
Это то, что я делаю
H = []
W = []
for i in net.index:
tmp = net['d'][i]
ds = np.where((M > np.floor(tmp)) & (M < np.floor(tmp)+1))
size = len(ds[0])
ind = randint(size) ## find two random locations with distance ds
h = ds[0][ind]
w = ds[1][ind]
H.append(h)
W.append(w)
df1 = pd.DataFrame()
df1['A'] = H
df1['B'] = W
Я получил сообщение об ошибке 'AttributeError: Объект 'numpy.ndarray' не имеет атрибута 'vstack' – emax