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

如何无for循环实现Pandas DataFrame按id分组的子集累计和?

解决方案

直接借助Pandas的分组、累计求和与位移操作即可实现,无需循环:

步骤1:构建DataFrame

先将给定的字典转换为Pandas DataFrame对象:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 1, 1, 0, 0, 4, 5, 5],
    'a': [2.5, 3.5, 1.0, 1.0, 2.0, 4.0, 2.3, 4.4]
})

步骤2:生成目标列b

通过groupby按id分组,对a列计算累计和后,用shift(1)将每组的累计结果向下偏移一行,最后用fillna(0)填充每组开头的空值:

df['b'] = df.groupby('id')['a'].cumsum().shift(1).fillna(0)

验证结果

执行后得到的DataFrame与示例要求完全一致:

id    a    b
0   1  2.5  0.0
1   1  3.5  2.5
2   1  1.0  6.0
3   0  1.0  0.0
4   0  2.0  1.0
5   4  4.0  0.0
6   5  2.3  0.0
7   5  4.4  2.3

这种方法依赖Pandas的矢量化运算,效率远高于循环,且适配你提到的“同一id的行始终相邻”的前提条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:01:38