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
相关产品推荐
相关产品推荐

