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

pandas groupby场景下如何实现列反向累计求和,统计分组内后续Score为1的数量

实现方案

你需要对分组内的序列先反转做累计求和,再还原顺序后扣除当前行的Score值,即可得到当前行之后同组Score为1的总数量,代码如下:

# 通用写法,兼容所有pandas版本
data['Sum'] = data.groupby('SubjectID copy')['Score'].apply(
    lambda x: x[::-1].cumsum()[::-1] - x
)

逻辑说明

  1. 按SubjectID copy分组后,先把每个分组内的Score序列反转,调用cumsum()做正序累计求和
  2. 把累计求和的结果再次反转,得到的是当前行+当前行之后所有行的Score总和
  3. 减去当前行的Score值,就排除了当前行本身的计数,仅统计后续行的Score=1的总数量,完全匹配你给出的示例结果。

如果你的数据集行数较多,可以用transform替代apply提升运行效率:

# 性能优化版,适合万行以上规模的数据集
data['Sum'] = data.groupby('SubjectID copy')['Score'].transform(
    lambda s: s.iloc[::-1].cumsum().iloc[::-1]
) - data['Score']

内容的提问来源于stack exchange,提问作者Guitarman045</think_never_used_51bce0c785ca2f68081bfa7d91973934># 实现方案
你需要对分组内的序列先反转做累计求和,再还原顺序后扣除当前行的Score值,即可得到当前行之后同组Score为1的总数量,代码如下:

# 通用写法,兼容所有pandas版本
data['Sum'] = data.groupby('SubjectID copy')['Score'].apply(
    lambda x: x[::-1].cumsum()[::-1] - x
)

逻辑说明

  1. 按SubjectID copy分组后,先把每个分组内的Score序列反转,调用cumsum()做正序累计求和
  2. 把累计求和的结果再次反转,得到的是当前行+当前行之后所有行的Score总和
  3. 减去当前行的Score值,就排除了当前行本身的计数,仅统计后续行的Score=1的总数量,完全匹配你给出的示例结果。

大数据量优化写法

如果你的数据集行数较多,可以用transform替代apply提升运行效率:

# 高版本pandas性能优化版
data['Sum'] = data.groupby('SubjectID copy')['Score'].transform(
    lambda s: s.iloc[::-1].cumsum().iloc[::-1]
) - data['Score']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:12:02