计算两个 pandas 数据帧的行之间的欧氏距离
Compute Euclidean distance between rows of two pandas dataframes
我有两个 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 列
通过使用 scipy.spatial.distance.cdist
:
from scipy.spatial.distance import cdist
ary = 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
我有两个 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 列
通过使用 scipy.spatial.distance.cdist
:
from scipy.spatial.distance import cdist
ary = 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