gpt4 book ai didi

python - 使用距离矩阵计算 Pandas Dataframe 中行之间的距离

转载 作者:太空狗 更新时间:2023-10-29 20:35:21 25 4
gpt4 key购买 nike

我有以下 Pandas DataFrame:

In [31]:
import pandas as pd
sample = pd.DataFrame({'Sym1': ['a','a','a','d'],'Sym2':['a','c','b','b'],'Sym3':['a','c','b','d'],'Sym4':['b','b','b','a']},index=['Item1','Item2','Item3','Item4'])
In [32]: print(sample)
Out [32]:
Sym1 Sym2 Sym3 Sym4
Item1 a a a b
Item2 a c c b
Item3 a b b b
Item4 d b d a

我想根据这个距离矩阵找到优雅的方法来获取每个 Item 之间的距离:

In [34]:
DistMatrix = pd.DataFrame({'a': [0,0,0.67,1.34],'b':[0,0,0,0.67],'c':[0.67,0,0,0],'d':[1.34,0.67,0,0]},index=['a','b','c','d'])
print(DistMatrix)
Out[34]:
a b c d
a 0.00 0.00 0.67 1.34
b 0.00 0.00 0.00 0.67
c 0.67 0.00 0.00 0.00
d 1.34 0.67 0.00 0.00

例如比较 Item1Item2 会比较 aaab -> accb -- 使用距离矩阵将是 0+0.67+0.67+0=1.34

理想输出:

       Item1   Item2  Item3  Item4
Item1 0 1.34 0 2.68
Item2 1.34 0 0 1.34
Item3 0 0 0 2.01
Item4 2.68 1.34 2.01 0

最佳答案

这是一个老问题,但是有一个 Scipy 函数可以做到这一点:

from scipy.spatial.distance import pdist, squareform

distances = pdist(sample.values, metric='euclidean')
dist_matrix = squareform(distances)

pdist 对 Numpy 矩阵进行操作,DataFrame.values 是数据框的底层 Numpy NDarray 表示。 metric 参数允许您选择多个内置距离度量之一,或者您可以传入任何二元函数以使用自定义距离。它非常强大,而且根据我的经验,速度非常快。结果是一个“平面”数组,它只包含距离矩阵的上三角(因为它是对称的),不包括对角线(因为它始终为 0)。 squareform 然后将这个扁平化的形式转换为完整的矩阵。

docs有更多信息,包括许多内置距离函数的数学概要。

关于python - 使用距离矩阵计算 Pandas Dataframe 中行之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com