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

按年份分组计算DataFrame列排除当前行的累计和

解决按年份分组计算累计和(排除当前行)的问题

你现在用的df1.groupby('Year')['Value'].cumsum()会把当前行的Value也包含进去,所以结果不符合预期。要实现组内累计和排除当前行,可以用以下两种简单方法:

方法1:累计和减去当前行值

直接用分组累计和减去当前行的Value,就能得到到上一行的累计和:

df1['CumSum'] = df1.groupby('Year')['Value'].cumsum() - df1['Value']

这种方法逻辑直观,第一行的结果会是0(因为第一行累计和就是自身,减去自身后为0),符合“排除当前行后无数据则和为0”的预期。

方法2:用shift偏移累计和

先计算分组累计和,再用shift(1)把结果往下偏移一行,最后用fillna(0)填充第一行的空值:

df1['CumSum'] = df1.groupby('Year')['Value'].cumsum().shift(1).fillna(0)

这种方法更贴合“取当前行之前所有行的和”的逻辑,偏移后第一行没有前序数据,所以填充为0。

示例验证

假设你的DataFrame是这样的:

import pandas as pd
df1 = pd.DataFrame({
    'Year': [2022, 2022, 2023, 2023, 2023],
    'Value': [10, 20, 5, 15, 25]
})

用方法1或方法2处理后,得到的CumSum列会是:

YearValueCumSum
2022100
20222010
202350
2023155
20232520

完全符合“排除当前行的组内累计和”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24