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

如何用统一符号(如下划线)扁平化Pandas DataFrame列层级?

解决Pandas多层级列DataFrame的扁平化问题

嗨,这事儿其实挺简单的,用Pandas自带的方法就能完美实现你要的效果。我先给你模拟出你描述的原DataFrame,再一步步教你怎么转成扁平化结构。

首先,先构造出符合你描述的带层级列的DataFrame:

import pandas as pd

# 按照你说的数据构造原DataFrame
data = [
    [0, 0, 1, 1, 264],  # id=264对应的A_a1、A_a2、B_b1、B_b2值
    [1, 1, 2, 2, 321]   # id=321对应的数值
]
# 创建多层级列索引
columns = pd.MultiIndex.from_tuples(
    [('A', 'a1'), ('A', 'a2'), ('B', 'b1'), ('B', 'b2'), ('id', '')],
    names=['Level1', 'Level2']
)
df = pd.DataFrame(data, columns=columns)

接下来就是核心的扁平化步骤,我们只需要处理列名,把层级用下划线连接起来,同时避免id列出现多余的下划线(因为它没有子列):

# 生成扁平化的列名:过滤空值后用下划线连接层级
flat_columns = ['_'.join(filter(None, col)) for col in df.columns]
# 复制原DataFrame并替换列名
df_flat = df.copy()
df_flat.columns = flat_columns

现在你可以打印df_flat看看结果,正好是你想要的结构:

A_a1  A_a2  B_b1  B_b2   id
0     0     0     1     1  264
1     1     1     2     2  321

简单解释一下:

  • filter(None, col)会把列元组里的空字符串过滤掉,所以id列的元组('id', '')会被处理成'id',而不是'id_'
  • _'.join(...)把层级部分用下划线连接,正好生成你要的A_a1、B_b2这种格式
  • 数据完全保留了原有的对应关系,没有任何变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:43