Pandas 使用自己的计算工具创建距离矩阵

Pandas 使用自己的计算工具创建距离矩阵,pandas,Pandas,我有一个由>50个维度组成的数据帧 使用欧几里德距离,我可以计算距离矩阵: import pandas as pd df2=pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8]}) df2 from scipy.spatial import distance_matrix dm=pd.DataFrame(distance_matrix(df2.values, df2.values), index=df2.index, columns=df2.index)

我有一个由>50个维度组成的数据帧

使用欧几里德距离,我可以计算距离矩阵:

import pandas as pd
df2=pd.DataFrame({'col1':[1,2,3,4],'col2':[5,6,7,8]})
df2
from scipy.spatial import distance_matrix
dm=pd.DataFrame(distance_matrix(df2.values, df2.values), index=df2.index, columns=df2.index)
dm
我想更加强调col1,因此我想使用以下公式:

sqrt(w1(x1-x2)^2 + w2(y1-y2)^2), w1=0.7, w2=0.3
通过阅读文档,我无法找到实现此更改的方法。我对python还比较陌生,所以想知道如何使用pandas实现它

这是否可以创建?

您可以使用并提供自己的度量公式:

w = (0.7, 0.3)
pd.DataFrame(squareform(pdist(df2.values, lambda u, v: np.sqrt((w*(u-v)**2).sum()))), index=df2.index, columns=df2.index)

你对自己写的距离公式有多确定?一个突出的问题是,在正常计算中,您的权重加起来是2,而在本例中,您的权重加起来只是1。因此,即使x1-x2和y1-y2具有相同的距离,您的公式也会产生与未加权情况完全不同的答案。大多数参考文献都说,这是计算加权距离矩阵的最佳方法,请参见如何添加特定测试。例如,np.其中u[3]==v[3],0,10.不确定您的意思:在示例中,u和v的长度为2.如果我要添加更多列,以便在计算之前检查它们是否相同。假设我有col3分类,并且想计算它们不同时的距离,即col3=['a','a','b','c',],我会包括测试u[3]=v[3],如果是这样,则生成一个常量值,例如使用np.whereu[3]=v[3],10,0你为什么不说你把它变成了一个新的问题——现在清楚多了。看我的