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

Pandas多级索引DataFrame按列排序时不打乱分组索引顺序的实现

解决方案

你之前的写法不符合预期的原因是:直接对times_sold全表排序会打散1_product_id的分组,而直接调用sort_index是按索引值的大小排序,和你要的按分组最高销量排序的逻辑不符。
要实现需求,核心是增加分组级别的排序权重,按以下逻辑处理即可:

  1. 先完成基础的分组聚合操作
  2. 给每个1_product_id分组计算该组下最高的times_sold值,作为外层分组的排序依据,保证最高销量的1_product_id整体排在前面
  3. 同一个1_product_id分组内部,再按单条记录的times_sold降序排列
  4. 最后设置复合索引,自动合并重复的外层索引值

完整实现代码如下:

# 1. 先做分组聚合求和
df_agg = df_out.groupby(['1_product_id','2_product_id'], as_index=False).sum()

# 2. 新增列:每个1_product_id对应的最大times_sold,作为外层分组的排序权重
df_agg['max_group_sold'] = df_agg.groupby('1_product_id')['times_sold'].transform('max')

# 3. 先按分组最大销量降序,再按单条记录的times_sold降序,最后设置复合索引并删除辅助列
df_result = df_agg.sort_values(by=['max_group_sold', 'times_sold'], ascending=[False, False])\
                  .set_index(['1_product_id', '2_product_id'])\
                  .drop(columns='max_group_sold')

执行后输出的df_result就完全符合你预期的格式:相同的1_product_id会聚合展示,外层按每个分组的最高times_sold排序,内层单条记录也按times_sold降序排列,Pandas默认显示的DataFrame会自动隐藏重复的外层索引值。

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:09