计算两个pandas数据帧的行之间的欧几里德距离

j18*_*897 6 python scipy euclidean-distance pandas

我有两个熊猫dataframes d1d2看起来像这些:

d1 好像:

  output   value1   value2   value2
    1           100     103      87
    1           201     97.5     88.9
    1           144     54       85
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

对于d1中的所有行,列输出的值为1,对于d2中的所有行,列的输出为0.这是一个分组变量.我需要找到d1和d2的每一行之间的欧氏距离(不在d1或d2内).如果d1m行并且d2n行,则距离矩阵将具有m行和n列

WeN*_*Ben 15

使用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
Run Code Online (Sandbox Code Playgroud)