Python 测量数据帧行之间的距离
我有一个数据框,它由472行和32列组成,看起来像这样: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
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,是的,我看到了,但我还需要找到一种方法来计算其他指标