我有一个包含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)
答案 0 :(得分:2)
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)