python - Dataframe 中多列的排名

标签 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)

最佳答案

我认为需要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)

关于python - Dataframe 中多列的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49462115/

相关文章:

sql - 在 PostgreSQL 中对多个唯一值进行排名的函数

python - 如何使用时间点计算 Pandas 中的累积 groupby 计数?

r - 在数据框的列上进行 Strsplit

python - Python 中的字典构造

python - 是否可以使用 mkdtemp 定义临时目录的名称?

python - 使用现有列作为多索引重新索引数据框

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

python pandas groupby 第一次约会

Python Numpy : Extracting a row from an array