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

Pandas MultiIndex按索引level 0分组后保持count降序排序问题

问题原因

你的原有代码存在两个核心错误导致排序失效:

  • 第二次groupby操作的分组键顺序错误,且无必要的二次聚合会直接打乱前一步的排序结果,pandas的groupby默认会对分组键做字典序排序,不会保留输入数据的原有顺序
  • 排序字段优先级设置错误:优先按counts排序会导致不同code的同计数行混排,无法保证相同code的行聚合在一起

正确实现

场景1:code按自然顺序(0510→0511→0512...)聚合并组内降序

# 1. 统计每个code+product的出现次数
data = df.groupby(['code', 'product'], as_index=False).size().rename(columns={'size':'count'})
# 2. 排序:先按code升序保证同code聚合,再按count降序实现组内排序
sorted_df = data.sort_values(by=['code', 'count'], ascending=[True, False])
# 3. (可选)设置多级索引实现同code合并显示的效果
result = sorted_df.set_index(['code', 'product'])

场景2:code按组内最高count值降序排列(高统计量的code组整体靠前)

如果需要让count最大值更高的code组整体排在前面(比如0512组有count=2的记录,会排在只有count=1的0510、0511组前面),可以加辅助列实现:

# 1. 统计每个code+product的出现次数
data = df.groupby(['code', 'product'], as_index=False).size().rename(columns={'size':'count'})
# 2. 新增辅助列:每个code组的最大count值,用于code组的整体排序
data['code_max_cnt'] = data.groupby('code')['count'].transform('max')
# 3. 排序:先按code组的最大count降序,再按code升序,最后组内count降序
sorted_df = data.sort_values(by=['code_max_cnt', 'code', 'count'], ascending=[False, True, False]).drop(columns='code_max_cnt')
# 4. (可选)设置多级索引
result = sorted_df.set_index(['code', 'product'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:45:02