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

Pandas groupby分组调用rank方法生成排名顺序不符合预期

问题原因

你之前的代码写法完全用错了rank()的逻辑:

  • 当你给rank()传入多列时,pandas会对每一列单独计算排名,不会按多列优先级做整行的排序排名
  • 你把两列的排名结果直接赋值给单列rank时,实际只取到了rank_level1这一列的单独排名结果,完全没用到rank_level2的排序规则,和你要的「先按rank_level1升序、同level1下再按rank_level2升序排整体名次」的需求完全不符。
正确实现方法

直接在分组内按排序优先级排序后用累计计数生成名次即可,逻辑完全匹配你给出的expected_Rank结果:

# 1. 先按分组维度、排名优先级字段整体排序
df_sorted = df.sort_values(by=['group1', 'userId', 'rank_level1', 'rank_level2'], ascending=True)
# 2. 分组内按排序后的顺序从1开始计数,即为正确排名
df_sorted['correct_rank'] = df_sorted.groupby(['group1', 'userId']).cumcount() + 1
# 3. 如果需要保留原始数据的行顺序,按原索引回排即可
df = df_sorted.sort_index()
结果验证

用你给出的样例数据跑上面的代码,生成的correct_rank和你提供的expected_Rank值完全一致:

  • 分组a/1下,rank_level1=3的行按rank_level2从小到大排序,y(-10.25)排第1、w(-9.36)排第2,和预期完全匹配
  • 分组b/1下,rank_level1=4的行中q(-25.92)比u(-4.8)数值更小,排第10、u排11,和预期完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:16:02