我有两个pandas数据框d1
和d2
,如下所示:
d1
看起来像:
output value1 value2 value2
1 100 103 87
1 201 97.5 88.9
1 144 54 85
d2
看起来像:
output value1 value2 value2
0 100 103 87
0 201 97.5 88.9
0 144 54 85
0 100 103 87
0 201 97.5 88.9
0 144 54 85
对于d1中的所有行,列输出的值为1,对于d2中的所有行,列的输出值为0。它是一个分组变量。我需要在d1和d2的每一行之间找到欧几里德距离(不在d1或d2范围内)。如果d1
有m
行而d2
有n
行,那么距离矩阵将有m
行和n列
答案 0 :(得分:13)
使用scipy.spatial.distance.cdist
:
import scipy
ary = scipy.spatial.distance.cdist(d1.iloc[:,1:], d2.iloc[:,1:], metric='euclidean')
pd.DataFrame(ary)
Out[1274]:
0 1 2 3 4 5
0 0.000000 101.167485 65.886266 0.000000 101.167485 65.886266
1 101.167485 0.000000 71.808495 101.167485 0.000000 71.808495
2 65.886266 71.808495 0.000000 65.886266 71.808495 0.000000