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

基于Level 1列重命名Pandas多级列的Level 0

Pandas多级列按Level 1值修改Level 0名称

场景说明

假设存在一个三级列索引的DataFrame,列结构为:(xxx, a, k), (xxx, b, l), (xxx, c, m),需要将Level 1值为b的列对应的Level 0值从xxx改为yyy,最终列名变为:(xxx, a, k), (yyy, b, l), (xxx, c, m)。

实现方法

方法一:遍历列元组逐个修改

先构造示例DataFrame方便测试:

import pandas as pd

# 构造三级列索引的示例DataFrame
columns = pd.MultiIndex.from_tuples(
    [('xxx', 'a', 'k'), ('xxx', 'b', 'l'), ('xxx', 'c', 'm')],
    names=['Level0', 'Level1', 'Level2']
)
df = pd.DataFrame([[1, 2, 3]], columns=columns)

然后遍历列元组,修改符合条件的Level 0值:

new_columns = []
for col in df.columns:
    # 判断当前列的Level1是否为'b'
    if col[1] == 'b':
        # 替换Level0为'yyy',保留其他层级
        new_col = ('yyy', col[1], col[2])
        new_columns.append(new_col)
    else:
        new_columns.append(col)

# 更新DataFrame的列索引
df.columns = pd.MultiIndex.from_tuples(new_columns, names=df.columns.names)

方法二:利用set_levels结合布尔掩码(更简洁)

这种方式无需遍历所有列,通过布尔筛选直接定位目标列修改:

import pandas as pd

# 构造示例DataFrame(同方法一)
columns = pd.MultiIndex.from_tuples(
    [('xxx', 'a', 'k'), ('xxx', 'b', 'l'), ('xxx', 'c', 'm')],
    names=['Level0', 'Level1', 'Level2']
)
df = pd.DataFrame([[1, 2, 3]], columns=columns)

# 生成Level1为'b'的布尔掩码
mask = df.columns.get_level_values(1) == 'b'

# 复制原Level0的取值,修改符合掩码条件的位置
new_level0 = df.columns.get_level_values(0).copy()
new_level0[mask] = 'yyy'

# 更新列索引的Level0层级
df.columns = df.columns.set_levels(new_level0, level=0)

验证结果

执行后打印df.columns,输出将为:

MultiIndex([('xxx', 'a', 'k'),
            ('yyy', 'b', 'l'),
            ('xxx', 'c', 'm')],
           names=['Level0', 'Level1', 'Level2'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14