对pandas矩阵中的所有值进行排序

时间:2018-01-04 16:30:28

标签: python pandas sorting

所以基本上我有一个带有相似度值的pandas矩阵。列和索引是项的id。所以我们假设我们有项目A,B,C。我会创建矩阵相似性,我会得到类似的东西。

    A    B      C 
A  1    0.5   0.75
B  0.5   1    0.1
C  0.75  0.1   1

所以现在我正在尝试用这个矩阵以某种方式对值进行排序。我真的不关心什么样的数据结构我会保证结果。但我想要实现的是通过对此进行排序,我会得到类似的东西。

A C 0.75
A B 0.5
C B 0.1

但是我只找到算法对熊猫中的特定列进行排序而不是别的。

3 个答案:

答案 0 :(得分:3)

IIUC:

df.stack().sort_values().reset_index()

输出:

  level_0 level_1     0
0       B       C  0.10
1       C       B  0.10
2       A       B  0.50
3       B       A  0.50
4       A       C  0.75
5       C       A  0.75
6       A       A  1.00
7       B       B  1.00
8       C       C  1.00

答案 1 :(得分:2)

使用numpy获得上三分,然后我们stacksort_values

a=np.triu(df.values,-1)
a[np.tril_indices(a.shape[0], 0)] = np.nan
a
Out[414]: 
array([[  nan,  0.5 ,  0.75],
       [  nan,   nan,  0.1 ],
       [  nan,   nan,   nan]])
df1=pd.DataFrame(data=a,index=df.index,columns=df.columns)

df1.stack().sort_values(ascending=False).reset_index()
Out[421]: 
  level_0 level_1     0
0       A       C  0.75
1       A       B  0.50
2       B       C  0.10

答案 2 :(得分:1)

Unstack会起作用。

df = pd.DataFrame([[1,.5,.75],[0.5,1,0.1],[0.75, 0.1, 1] ], index=['A','B','C'], columns =['A','B','C'])

df.unstack()


A  A    1.00
   B    0.50
   C    0.75
B  A    0.50
   B    1.00
   C    0.10
C  A    0.75
   B    0.10
   C    1.00