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

如何为Pandas DataFrame新增多层列索引层级 分组MAE等四类指标

Pandas DataFrame多层列索引分组实现方案

我们这里示例将MAE、MSE、RMSE、MPE所在分组命名为误差指标,其余四列所在分组命名为其他指标,你可以根据实际需求修改分组命名、层级名称。


场景1:原有DataFrame为单层列索引

这是最常见的使用场景,直接构造列与分组的映射再替换原有列索引即可:

import pandas as pd
import numpy as np

# --------------- 模拟你现有的DataFrame,实际使用时替换为你自己的df即可 ---------------
df = pd.DataFrame(
    np.random.randint(0, 10, size=(3, 8)),
    columns=['MAE', 'MSE', 'RMSE', 'MPE', '准确率', '召回率', 'F1值', '精确率']
)

# --------------- 核心实现逻辑 ---------------
# 定义列所属分组的映射规则
group_mapping = {
    'MAE': '误差指标',
    'MSE': '误差指标',
    'RMSE': '误差指标',
    'MPE': '误差指标',
    '准确率': '其他指标',
    '召回率': '其他指标',
    'F1值': '其他指标',
    '精确率': '其他指标'
}

# 生成多层列索引
new_multi_columns = pd.MultiIndex.from_tuples(
    [(group_mapping[col], col) for col in df.columns],
    names=['指标分组', '具体指标'] # 两个索引层级的名称,可自定义修改
)

# 替换原DataFrame的列索引
df.columns = new_multi_columns

# 查看结果
print(df)

场景2:原有DataFrame已经是多层列索引(对应你给出的模拟数据结构)

如果你需要给已经有多层列索引的DataFrame新增顶层分组,用以下实现:

import pandas as pd
import numpy as np

# --------------- 你给出的模拟数据代码 ---------------
mux3 = pd.MultiIndex.from_product([list('ABCD'),list('1234')], names=['one','two'])
df3 = pd.DataFrame(np.random.choice(10, (3, len(mux3))), columns=mux3)

# --------------- 核心实现逻辑 ---------------
# 定义原列所属分组的规则,示例中我们把A、B开头的4列归为一组,C、D开头的4列归为另一组
def get_group(col_tuple):
    if col_tuple[0] in ['A', 'B']:
        return '分组1'
    else:
        return '分组2'

# 生成包含新增顶层分组的三层列索引
new_columns = pd.MultiIndex.from_tuples(
    [(get_group(col), *col) for col in df3.columns],
    names=['新增顶层分组', *df3.columns.names]
)

# 替换原列索引
df3.columns = new_columns

# 查看结果
print(df3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:27:03