繁体   English   中英

测量 dataframe 的行之间的距离

[英]measuring the distance between rows of a dataframe

我有一个 dataframe,它由 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 之间的每个数字代表不同的牙齿类别。 现在我想通过使用不同的距离度量(例如 MANHATTAN、EUCLID、MINKOWSKI)来测量任意两行之间的距离。 所以,差异越小,他们就越有可能是同一个人等等。

*如果我在计算这些指标之前应用 ONE-HOT-ENCODING,每行将有超过 32 列,这对我来说毫无用处。

*我还找到了 cdistpdist ,但是这些函数给了我逐元素的距离结果。 但我想要的是在任意两行之间获得“单一结果”。

我是在尝试一些无意义的事情还是我应该怎么做才能计算出这些距离?

您似乎正在寻找的距离计算 function 如下:

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise_distances.html

您可以将度量设置为用于 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)

output 将是:

阵列([[4.24264069]])

类似地,output 为

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM