多层索引DataFrame如何逐组相邻两行求和 奇数行保留组内末行
Pandas 多层索引分组相邻两行求和实现方案
针对给定的多层索引DataFrame相邻行配对求和、奇数行末尾自动保留的需求,可直接通过pandas内置分组聚合实现,无需手写循环判断奇偶,代码兼容组内任意行数的场景。
实现代码
# 核心处理逻辑,可直接套用在你的df1上 df2 = ( df1 # 按外层索引分组,同时给组内相邻两行分配相同配对ID .groupby([ df1.index.get_level_values(0), # 保留原外层索引 df1.groupby(level=0).cumcount() // 2 # 组内行序号整除2生成配对ID ]) .sum() # 同配对行求和,单元素配对求和结果为自身原值 )
逻辑说明
- 配对ID生成规则:对每个外层分组内的行从0开始计数,将计数结果整除2,即可自动实现相邻两行绑定为同一组:
- 组内第0、1行计数为0、1,整除2结果均为0,绑定为第一组求和
- 组内第2、3行计数为2、3,整除2结果均为1,绑定为第二组求和
- 若组内行数为奇数,最后一行的计数整除2后单独成组,求和结果就是该行原值,无需额外判断
- 该逻辑自动适配组内任意行数:组内6行(偶数)时会自动生成3个配对组完成两两求和,组内5行(奇数)时自动保留最后一行,完全匹配需求规则。
结果验证
运行上述代码后得到的df2输出和预期完全一致:
0 1 0 0 21 7 1 15 10 2 83 3 1 0 47 7 1 147 16 2 33 7
如果你的分组层级不是最外层,只需要把代码里
groupby(level=0)的0替换为你实际需要分组的索引层级编号/名称即可。
内容的提问来源于stack exchange,提问作者Neyls
相关产品推荐
相关产品推荐

