欧几里德距离的python数据帧矩阵

时间:2016-11-29 16:43:17

标签: python pandas dataframe

我想创建一个自己定制的k最近邻居方法。

为此,我需要一个矩阵(x:y),它返回给定函数的x和y的每个组合的距离(例如,基于我的数据集的7个项目的欧几里德)。

e.g。

data:
   x1  x2  x3
  row 1:  1   2   3
  row 2:  1   1   1 
  row 3:  4   2   3

如果我选择x1和x2以及欧几里德,则输出应为3x3输出

1:1=0
1:2 =sqrt((1-1)^2+(2-1)^2)=1
1:3 =sqrt((1-4)^2+(2-2)^2)=sqrt(3)
2:1=1:2=1
2:2=0
2:3=sqrt((1-4)^2+(1-2)^2)=2
3:3=0

依此类推......

如何在不迭代数据框的情况下编写它?

提前感谢您的支持。

1 个答案:

答案 0 :(得分:4)

您可以使用scipy.spatial.distance.pdistscipy.spatial.distance.squareform

from scipy.spatial.distance import pdist, squareform

dist = pdist(df[['x1', 'x2']], 'euclidean')
df_dist = pd.DataFrame(squareform(dist))

如果您只想要一个数组作为输出而不是DataFrame,只需单独使用squareform,而不将其包装在DataFrame中。

结果输出(作为DataFrame):

     0         1         2
0  0.0  1.000000  3.000000
1  1.0  0.000000  3.162278
2  3.0  3.162278  0.000000