使用距离矩阵在Pandas Dataframe中的行之间进行距离计算

 淋殁 发布于 2023-02-13 17:12

我有以下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 

例如Item1,Item2将比较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

shadowtalker.. 21

这是一个老问题,但有一个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然后将这种扁平形式翻译成一个完整的矩阵.

该文档有更多的信息,其中包括了许多内置的距离函数的数学纲要.

1 个回答
  • 这是一个老问题,但有一个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然后将这种扁平形式翻译成一个完整的矩阵.

    该文档有更多的信息,其中包括了许多内置的距离函数的数学纲要.

    2023-02-13 17:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有