我有一个包含 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)
最佳答案
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)
关于python - Dataframe 中多列的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49462115/