在 Dataframe 中使用多列进行排名

Ranking with multiple columns in Dataframe

我有一个包含 3 列的数据框

Alpha Bravo Charlie
20    30    40
50    10    20
40    60    10

我希望创建 3 个新列,其排名产生以下结果,使 3 列中最高的排名为 3 比 1:

AlphaRank BravoRank CharlieRank
1         2         3
3         1         2
2         3         1

我知道有 dataframe.rank 函数,但我只看到了 1 列的示例,而不是 3

我试过这个有问题:

for newrank in ['Alpha', 'Bravo', 'Charlie']:
    ranksys = df[newrank]

    ranksystem = newrank +'Rank'
    df[ranksystem] = ranksys.rank(axis=1).astype(int)

我认为需要rank + astype:

cols = ['Alpha', 'Bravo', 'Charlie']
df[cols] = df[cols].rank().astype(int)
print (df)
   Alpha  Bravo  Charlie
0      1      2        3
1      3      1        2
2      2      3        1

Numpy 替代 numpy.argsort:

df[cols] = pd.DataFrame(df[cols].values.argsort(axis=0) + 1,index=df.index,columns=df.columns)