如何对pandas.DataFrame中的每一行进行明确排名

时间:2017-11-22 15:55:27

标签: python pandas data-mining

我拥有什么

用户 - 用户相似度矩阵,其中某些行具有重复值且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.rankdatadoc),但它无法保留NaN

1 个答案:

答案 0 :(得分:4)

rankmethod='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