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

如何在Pandas中创建多聚合列且避免MultiIndex?

解决Pandas Groupby Agg生成多级列索引的问题

嘿,我明白你遇到的问题了——用agg(['median','std'])确实会生成冗余的多级列索引。这里有两种完美的解决方案,直接帮你得到想要的扁平化格式:

方法一:直接生成无多级索引的聚合列(推荐)

你可以在agg()里传入一个字典,明确指定每个聚合函数对应的新列名,这就和SQL里用as定义别名的逻辑一样,一步到位避免多级索引:

# 直接指定聚合列的名称,无需后续处理
month_df = month_df[['Month','M_day','sold']].groupby(['Month','M_day']).agg(
    median=('sold', 'median'),  # 将sold的中位数结果命名为median
    std=('sold', 'std')         # 将sold的标准差结果命名为std
)

print(month_df.head())

这样输出的列就是median和std,完全匹配你期望的格式。

方法二:扁平化已有的多级列索引

如果你已经生成了带多级索引的DataFrame,也可以快速调整列名。因为你的多级列第一级都是sold,直接提取第二级的名称作为新列名即可:

# 提取多级列的第二级作为新列名
month_df.columns = month_df.columns.get_level_values(1)

# 或者更直白地手动重命名列
# month_df.columns = ['median', 'std']

print(month_df.head())

执行后就能把原来的sold->median、sold->std结构直接简化为median和std列。

为什么原来的代码会产生多级索引?

当你给agg()传函数列表(比如['median','std'])时,Pandas会把原列名(这里是sold)和聚合函数名组合成两级列索引,用来区分不同原列的聚合结果。而用字典指定新列名的方式,会直接跳过这个多级结构,更贴合SQL的写法逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:02