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

Pandas如何按Metric列groupby后按2021列排序得到目标DataFrame

问题原因

你原有代码出现问题的核心原因有两个:

  • groupby操作本身返回的是DataFrameGroupBy中间对象,只有后续执行聚合、过滤、取值等操作后才会返回结构化的DataFrame,直接赋值自然只能拿到分组对象
  • 你的需求本质是同Metric分组内按2021降序排列,不需要做分组聚合,直接用多字段排序就能实现,不用复杂的groupby操作

正确实现代码

方案1:多字段排序(最优,性能最高)

直接按两个字段排序即可完全匹配你期望的输出:

import pandas as pd
# 你的原始DataFrame
df = pd.DataFrame({ 
    'Metric': ['Total Assets', 'Total Promo', 'Total Assets', 'Total Promo'],
    'Risk': ['High', 'High','Low', 'Low'],
    '2021': [ 200, 100, 400, 50]})
# 排序逻辑:先按Metric升序保证同类指标放一起,再按2021降序
df = df.sort_values(by=['Metric', '2021'], ascending=[True, False]).reset_index(drop=True)
print(df)

运行后输出完全符合你的预期:

Metric  Risk  2021
0  Total Assets   Low   400
1  Total Assets  High   200
2   Total Promo  High   100
3   Total Promo   Low    50

方案2:groupby实现(满足你要先groupby的要求)

如果一定要先执行groupby逻辑,可以在分组后对每个组做排序:

df = df.groupby('Metric', group_keys=False).apply(lambda x: x.sort_values('2021', ascending=False)).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:39:04