如何在 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.rankdatadoc),但是不能保持NaN

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