Pandas如何对层级结构DataFrame的二级列按一级列分组求和
实现代码
你可以直接基于多级列索引的层级分组求和,代码非常简洁:
import pandas as pd # 原始DataFrame构造逻辑 df = pd.DataFrame(data=[[1,2,4,5,1,2], [7,8,10,11,7,8], [13,14,16,17,4,5]], index=pd.date_range('2004-01-01', '2004-01-03')) df.columns = pd.MultiIndex.from_product([['x', 'y', 'z'], list('ab')]) # 核心求和逻辑 res = df.groupby(level=0, axis=1).sum()
如果你偏好遍历一级列逐个计算的写法,也可以用字典推导式生成结果,效果完全一致:
res = pd.DataFrame({level1_col: df[level1_col].sum(axis=1) for level1_col in df.columns.unique(level=0)})
输出结果
运行后得到的res结构如下:
| 日期 | x | y | z |
|---|---|---|---|
| 2004-01-01 | 3 | 9 | 3 |
| 2004-01-02 | 15 | 21 | 15 |
| 2004-01-03 | 27 | 33 | 9 |
逻辑说明
axis=1指定按列维度做分组操作level=0指定取多层列索引的第一层(也就是x/y/z一级列)作为分组依据- 求和后会自动将一级列名作为结果的列名,完全符合需求
内容的提问来源于stack exchange,提问作者MathMan 99
相关产品推荐
相关产品推荐

