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

pandas按两列分组后组内按第三列降序排序如何实现?

解决方案

原代码失效原因

  • 字段名不匹配:需求要求按store_id分组,但代码中错误使用了spins_store_id作为分组字段,分组逻辑和预期不符
  • 未赋值保存结果:pandas的分组及排序操作不会修改原DataFrame,需要将返回结果赋值给新变量才能生效

可行实现方式

方式1:分组内排序(符合原始思路的修正版)

添加group_keys=False避免生成冗余的分组层级索引,同时修正字段名、保存返回结果:

df_sorted = df_filled_weeks.groupby(['retailer_id', 'store_id'], group_keys=False)\
    .apply(lambda x: x.sort_values('week_id', ascending=False))
# 如果需要重置为连续的整数索引,可以加上下面一行
# df_sorted = df_sorted.reset_index(drop=True)

方式2:多字段直接排序(性能更优)

pandas原生支持多字段排序,先按两个分组字段升序排列保证同组数据聚合,再按week_id降序排列,最终效果和分组内排序完全一致,且执行效率更高:

df_sorted = df_filled_weeks.sort_values(
    by=['retailer_id', 'store_id', 'week_id'],
    ascending=[True, True, False]
)

如果需要覆盖原DataFrame,直接将结果赋值给df_filled_weeks即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03