所以基本上我有一个带有相似度值的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
但是我只找到算法对熊猫中的特定列进行排序而不是别的。
答案 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
获得上三分,然后我们stack
和sort_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