scipy pdist()熊猫DataFrame

问题描述:

我有一个大的数据框(例如15k对象),其中每行是一个对象,列是数字对象功能。它的形式是:scipy pdist()熊猫DataFrame

df = pd.DataFrame({ 'A' : [0, 0, 1], 
        'B' : [2, 3, 4], 
        'C' : [5, 0, 1], 
        'D' : [1, 1, 0]}, 
        columns= ['A','B', 'C', 'D'], index=['first', 'second', 'third']) 

我要计算所有对象(行)的成对距离和读取scipy's pdist()函数是一个很好的解决方案,由于其计算效率。我可以简单地叫:

res = pdist(df, 'cityblock') 
res 
>> array([ 6., 8., 4.]) 

而且看到res数组包含以下顺序的距离:[first-second, first-third, second-third]

我的问题是我怎么能得到这个矩阵,数据框或(不太希望)字典格式,所以我确切地知道每个距离值属于哪一对来,象下面这样:

 first second third 
first 0  -  - 
second 6  0  - 
third 8  4  0 

最后,我想将distance matrix作为一个熊猫DataFrame可能很方便,因为我可以对每行应用一些排名和排序操作(例如,找到对象最靠前的N个对象first)。

哦,我找到了这个webpage的答案。显然,对于名为squareform()的专用功能。暂时不要删除我的问题,以免它可能对其他人有帮助。

from scipy.spatial.distance import squareform 
res = pdist(df, 'cityblock') 
squareform(res) 
pd.DataFrame(squareform(res), index=df.index, columns= df.index) 
>>  first second third 
>>first  0  6  8 
>>second  6  0  4 
>>third  8  4  0 
+1

好的和有用的答案! +1 –

+0

发现这有用 - 感谢张贴 – andrewm4894