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

如何在Python的多层索引DataFrame中新增二级列作为同组二级列的均值?

实现方法

首先构造示例DataFrame(方便复现):

import pandas as pd

df = pd.DataFrame(
    [[1,2,3,4], [1,2,3,4]],
    index=['aaa', 'bbb'],
    columns=pd.MultiIndex.from_tuples([('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two')])
)

方法一:分组计算+合并排序

利用groupby按一级列分组计算均值,再合并回原DataFrame并排序列:

# 计算每个一级分组的列均值
mean_df = df.groupby(axis=1, level=0).mean()
# 将均值列转换为多级索引格式
mean_df.columns = pd.MultiIndex.from_tuples([(col, 'mean') for col in mean_df.columns])
# 合并原数据与均值列,按一级列排序保证分组内列顺序
result = pd.concat([df, mean_df], axis=1).sort_index(axis=1, level=0)

方法二:遍历一级列插入均值

逐个处理每个一级分组,计算并插入均值列:

# 获取所有唯一的一级列名
level0_names = df.columns.get_level_values(0).unique()

for name in level0_names:
    # 计算当前一级分组下所有二级列的行均值
    mean_vals = df[name].mean(axis=1)
    # 添加新的均值列,索引为(一级列名, 'mean')
    df[(name, 'mean')] = mean_vals

# 按一级列排序,让每个分组的列(one、two、mean)排列在一起
df = df.sort_index(axis=1, level=0)

两种方法最终都会得到预期结果:

bar                           baz          
        one       two       mean      one       two     mean
aaa       1         2        1.5        3         4      3.5
bbb       1         2        1.5        3         4      3.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:03:25