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

多层索引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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:45:34