如何在 pandas.DataFrame 中对每一行进行明确排名
How to rank distinctly for each row in pandas.DataFrame
我有什么
一些行有重复值的用户-用户相似度矩阵和NaN
userId 316 320 359 370 910
userId
316 1.0 0.500000 0.500000 0.500000 NaN
320 0.5 1.000000 0.242837 0.019035 0.031737
359 0.5 0.242837 1.000000 0.357620 0.175914
370 0.5 0.019035 0.357620 1.000000 0.317371
910 NaN 0.031737 0.175914 0.317371 1.000000
我想要的
我想清楚地对每一行的相似度进行排序。像这样:
userId 316 320 359 370 910
userId
316 1 2 3 4 NaN
320 2 1 3 5 1
359 2 4 1 3 5
370 2 5 3 1 4
910 NaN 4 3 2 1
相同值之间的排名并不重要。但它必须是一个独特的价值。而且NaN
必须保留。
我累什么
我试过 df.rank(ascending =False,axis = 1)
(doc),但没能给我明确的排名值。
我也试过scipy.stats.rankdata
(doc),但是不能保持NaN
。
将 rank
与 method='first'
结合使用
df.rank(1, ascending=False, method='first')
316 320 359 370 910
316 1.0 2.0 3.0 4.0 NaN
320 2.0 1.0 3.0 5.0 4.0
359 2.0 4.0 1.0 3.0 5.0
370 2.0 5.0 3.0 1.0 4.0
910 NaN 4.0 3.0 2.0 1.0
我有什么
一些行有重复值的用户-用户相似度矩阵和NaN
userId 316 320 359 370 910
userId
316 1.0 0.500000 0.500000 0.500000 NaN
320 0.5 1.000000 0.242837 0.019035 0.031737
359 0.5 0.242837 1.000000 0.357620 0.175914
370 0.5 0.019035 0.357620 1.000000 0.317371
910 NaN 0.031737 0.175914 0.317371 1.000000
我想要的
我想清楚地对每一行的相似度进行排序。像这样:
userId 316 320 359 370 910
userId
316 1 2 3 4 NaN
320 2 1 3 5 1
359 2 4 1 3 5
370 2 5 3 1 4
910 NaN 4 3 2 1
相同值之间的排名并不重要。但它必须是一个独特的价值。而且NaN
必须保留。
我累什么
我试过 df.rank(ascending =False,axis = 1)
(doc),但没能给我明确的排名值。
我也试过scipy.stats.rankdata
(doc),但是不能保持NaN
。
将 rank
与 method='first'
df.rank(1, ascending=False, method='first')
316 320 359 370 910
316 1.0 2.0 3.0 4.0 NaN
320 2.0 1.0 3.0 5.0 4.0
359 2.0 4.0 1.0 3.0 5.0
370 2.0 5.0 3.0 1.0 4.0
910 NaN 4.0 3.0 2.0 1.0