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

如何扁平化聚合后的嵌套Pandas DataFrame列,设置为A、B_min、B_max

解决DataFrame聚合后嵌套列的扁平化问题

嘿,我来帮你搞定这个嵌套列的麻烦!聚合后出现多级嵌套列确实挺恼人的,这里给你两种简单规范的方法,直接把结构改成A、B_min、B_max的扁平形式:

方法一:聚合阶段直接指定列名(推荐)

这是最省心的方式——在聚合的时候就给每个聚合结果指定好列名,从根源上避免生成嵌套列。比如用groupby.agg()的时候,通过关键字参数直接定义列名和对应的聚合规则:

import pandas as pd

# 先构造示例数据
data = {'A': [1,1,2,2], 'B': [10,20,5,15]}
df = pd.DataFrame(data)

# 一步到位生成扁平结构的DataFrame
flat_df = df.groupby('A').agg(
    B_min=('B', 'min'),  # 把B的最小值命名为B_min
    B_max=('B', 'max')   # 把B的最大值命名为B_max
).reset_index()  # 把分组的A从行索引转回普通列

print(flat_df.columns)
# 输出:Index(['A', 'B_min', 'B_max'], dtype='object')

这种方法既规范又直观,完全不需要后续处理嵌套列。

方法二:处理已生成的嵌套多级列

如果已经得到了嵌套列的DataFrame,也可以快速把多级列扁平化。假设你的聚合结果是这样的多级列结构:

B
      min max
A
1     10  20
2     5   15

你可以用两种方式处理:

方式1:合并多级列名

把多级列的层级用下划线拼接成单个列名,再把行索引转回列:

# 合并多级列的名称
agg_df.columns = ['_'.join(col) for col in agg_df.columns]
# 把A从行索引转为普通列
flat_df = agg_df.reset_index()

方式2:直接重命名列

如果列的数量不多,直接手动指定新列名更直接:

# 先把A转回列
flat_df = agg_df.reset_index()
# 直接替换列名
flat_df.columns = ['A', 'B_min', 'B_max']

为什么reindex_axis()和unstack()没用?

你之前试的这两个方法其实不对症:

  • reindex_axis()(现在已经被reindex()替代)是用来调整索引的顺序,不处理列的层级结构;
  • unstack()是把行索引中的层级转成列,和你要扁平化列层级的需求不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:53:16