在Dataframe中使用多列进行排名

时间:2018-03-24 06:56:31

标签: python dataframe ranking

我有一个包含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)

1 个答案:

答案 0 :(得分:2)

我认为需要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.argsort的Numpy替代方案:

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