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

如何通过关联DataFrame为Pandas添加多索引并按元索引聚合求和

解决方法:为DataFrame添加层级列并按高层索引汇总求和

没问题,我来一步步帮你实现这个需求!首先我们先把你提到的两个DataFrame构造出来,方便后续操作:

import pandas as pd

# 构造原始df
data = [[1, 2, 1, 4], [3, 0, 2, 2], [1, 5, 3, 1]]
df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'])

# 构造cat_df并整理成映射关系
cat_data = [['X', 'A'], ['Y', 'B'], ['Y', 'C'], ['Z', 'D']]
cat_df = pd.DataFrame(cat_data, columns=['broader category', 'current category'])
# 转成"当前列名: 高层分类"的映射字典
col_mapping = cat_df.set_index('current category')['broader category'].to_dict()

步骤1:为df添加层级列索引

我们需要把cat_df里的broader category作为高层索引,原始列名作为底层索引,构造一个多级列(MultiIndex):

# 生成多级列的元组列表,格式为(高层分类, 原始列名)
multi_col_tuples = [(col_mapping[col], col) for col in df.columns]
# 为df设置多级列索引
df.columns = pd.MultiIndex.from_tuples(multi_col_tuples, names=['broader category', 'current category'])

print("添加层级列后的df:")
print(df)

运行后你会得到这样的层级列结构:

broader category  X  Y     Z
current category  A  B  C  D
0                 1  2  1  4
1                 3  0  2  2
2                 1  5  3  1

步骤2:按高层索引汇总求和

接下来直接用sum()方法,指定按broader category层级进行列方向的聚合求和:

# 按高层分类汇总,axis=1表示对列操作
summary_df = df.sum(level='broader category', axis=1)

print("\n汇总后的新DataFrame:")
print(summary_df)

最终的汇总结果如下:

X  Y  Z
0  1  3  4
1  3  2  2
2  1  8  1

简单说下逻辑:level='broader category'指定了聚合的层级,axis=1告诉pandas我们要对列维度进行求和,这样就能自动把同一高层分类下的所有子列值加总到一起啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:49:19