You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas DataFrame按一列升序、另一列降序排名?

Pandas 多列优先级排名实现方法

你可以通过构造复合排序键,结合rank()方法实现需求,完全不需要大量IF语句:

  1. 先按指定规则排序:# of hits升序,% chance降序
  2. 对排序后的结果用rank(method='first')分配唯一排名,保证并列时按排序顺序打破平局

完整代码

# 链式写法,直接生成排名并映射回原DataFrame
df['Rank'] = (df.sort_values(by=['# of hits', '% chance'], ascending=[True, False])
                .rank(method='first', ascending=False)['# of hits']
                .astype(int)
                .reindex(df.index))

分步写法(更易理解)

# 1. 按规则排序数据
df_sorted = df.sort_values(by=['# of hits', '% chance'], ascending=[True, False])
# 2. 生成排名,method='first'确保并列时按排序顺序分配唯一值
df_sorted['Rank'] = df_sorted.rank(method='first', ascending=False)['# of hits'].astype(int)
# 3. 将排名映射回原DataFrame(保留原始行顺序)
df = df.merge(df_sorted[['# of hits', '% chance', 'Rank']], on=['# of hits', '% chance'], how='left')

结果验证

运行后会得到你预期的排名:

# of hits% chanceRank
1502
21003
1951
3755
2604

关键说明

  • sort_values的ascending参数传入列表,分别对应每列的排序方向:True为升序,False为降序
  • rank(method='first')会按照排序后的行顺序分配排名,彻底避免并列时的重复排名问题
  • reindex(df.index)用于将排名结果还原到原DataFrame的原始行顺序

内容的提问来源于stack exchange,提问作者Shazbah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:27:47