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

如何在Pandas多层索引多列DataFrame中按资产列块求和?

给多层列索引的Pandas DataFrame按顶层分组添加求和列

首先先构建你提供的示例DataFrame:

import pandas as pd

# 构建多层列索引
columns = pd.MultiIndex.from_tuples([
    ('Asset1', 'private'), ('Asset1', 'public'), ('Asset1', 'classified'),
    ('Asset2', 'private'), ('Asset2', 'public'), ('Asset2', 'classified')
])

# 填充数据
data = [
    [2, 4, 5, 3, 4, 5],
    [6, 7, 8, 9, 10, 11]
]

df = pd.DataFrame(data, index=['Bank1', 'Bank2'], columns=columns)

方法一:利用groupby批量计算并合并

通过groupby按顶层列索引分组求和,再将求和列合并回原DataFrame并排序:

# 计算每个Asset的列求和结果
sum_df = df.groupby(level=0, axis=1).sum()
# 为求和结果设置多层列索引,匹配原格式
sum_df.columns = pd.MultiIndex.from_tuples([(col, 'total') for col in sum_df.columns])

# 合并原数据与求和列,按顶层索引排序让total列对应到各Asset下方
result = pd.concat([df, sum_df], axis=1).sort_index(axis=1, level=0)

方法二:循环遍历每个顶层列处理

如果需要更直观的分步操作,可以遍历每个Asset,单独计算求和并添加列:

result = df.copy()

# 遍历所有唯一的顶层列(Asset1、Asset2)
for asset in df.columns.get_level_values(0).unique():
    # 计算当前Asset下所有子列的行求和
    total_series = df[asset].sum(axis=1)
    # 添加新的多层索引列(asset, 'total')
    result[(asset, 'total')] = total_series

# 按顶层索引排序,确保total列跟随对应Asset的其他列
result = result.sort_index(axis=1, level=0)

执行上述代码后,result的输出即为你期望的格式:

Asset1                         Asset2                  
          private public classified total private public classified total
Bank1       2      4          5    11       3      4          5    12
Bank2       6      7          8    21       9     10         11    30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:19