Python 测量数据帧行之间的距离

Python 测量数据帧行之间的距离,python,pandas,dataframe,one-hot-encoding,Python,Pandas,Dataframe,One Hot Encoding,我有一个数据框,它由472行和32列组成,看起来像这样: 2 3 0 4 2 0 0 5 2 3 3 3 2 0 5 5 3 3 3 2 2 0 2 5 3 3 3 2 2 2 0 5 2 3 0 4 2 0 0 5 2 3 3 3 2 0 5 5 3 3 3 2 2 0 2 5

我有一个数据框,它由472行和32列组成,看起来像这样:

2   3   0   4   2   0   0   5   2   3   3   3   2   0   5   5   3   3   3   2   2   0   2   5   3   3   3   2   2   2   0   5
2   3   0   4   2   0   0   5   2   3   3   3   2   0   5   5   3   3   3   2   2   0   2   5   3   3   3   2   2   2   0   5
2   3   0   4   2   0   0   5   2   3   3   3   2   0   5   5   3   3   3   2   2   0   2   5   3   3   3   2   2   2   0   5
这里,每行代表一个人的32颗牙齿,0-5之间的每个数字代表不同的牙齿类别。现在我想通过使用不同的距离度量(例如曼哈顿、欧几里得、明考斯基)来测量任意两行之间的距离。因此,差异越小,他们就越有可能是同一个人,等等

*如果我在计算这些度量之前应用一次热编码,那么每行将有超过32列,这对我来说是无用的

*我还发现了和,但这些函数给出了元素距离结果。但我想要的是在任意两行之间获得一个“单一结果”


我是在尝试一些没有意义的东西,还是应该做些什么来计算这些距离?

您似乎在寻找的距离计算功能如下:

您可以将度量设置为scipy.spatial.distance.pdist使用的任何度量

它将如何工作的示例:

a = [[1,2,3,4,5,6,7,8,10]]
b = [[2,4,1,3,4,5,6,7,8]]
c = [[4,2,1,54,7,85,89,1,2]]

from sklearn.metrics import pairwise_distances

pairwise_distances(a,b)
产出将是:

数组([[4.24264069]])

类似地,输出为

pairwise_distances(a,c)
将是:

数组([[124.87994234]]

因此,c离a更远

你可以在你的问题中使用这个逻辑。在您的情况下,以下代码段可以实现此目的:

import pandas as pd
import numpy as np

df = pd.read_csv('your_file.csv')
for i, row in df.iterrows():
    row = np.array(row)
    for j, other_row in df.iterrows():
       other_row = np.array(other_row)
       distance = pairwise_distances(np.reshape(row,(1,len(row))),np.reshape(other_row,(1,len(other_row))))
       print("Distance between row {} and {} : {}".format(i,j,distance))

这回答了你的问题吗?关于欧几里德,请注意,用numpy的说法,它被命名为2-norm@IshwarVenugopal,不幸的是,不完全如此。@Daweo,是的,我看到了,但我还需要找到一种方法来计算其他指标