计算两个 pandas 数据帧的行之间的欧氏距离

Compute Euclidean distance between rows of two pandas dataframes

我有两个 pandas 数据帧 d1d2 看起来像这样:

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 内)。如果 d1m 行并且 d2n 行,那么距离矩阵将有 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