Python pandas基于groupby()实现按月重置的累计求和方法
Pandas按自然月重置分组累计计数实现
问题原因
原有代码仅按electronics维度做二级分组累加,未将「自然月」作为分组截断维度,cumsum()会在单个electronics分组内持续累加所有日期的计数,不会在跨月时自动重置,因此出现跨月累计值不符合预期的问题。
修复逻辑
- 先将
date字段转为标准datetime类型,避免字符串格式导致的月份提取、排序错误 - 从日期字段提取「年-月」维度,作为累计值重置的分组标识
- 先统计每个电子产品每日的ID计数,再按「电子产品+年-月」分组做组内累计,即可实现跨月自动从0重新计算
可直接运行的代码
import pandas as pd # 日期格式转换 test['date'] = pd.to_datetime(test['date']) # 提取年月维度作为累计重置标记 test['year_month'] = test['date'].dt.to_period('M') # 先统计每日单品类的ID数量 daily_stat = test.groupby( ['electronics', 'year_month', 'date'] )['id'].count().reset_index(name='daily_count') # 按品类+年月分组做组内累计,跨月自动重置 daily_stat['month_cum_count'] = daily_stat.groupby( ['electronics', 'year_month'] )['daily_count'].cumsum()
结果匹配说明
按上述逻辑计算:
- 2022年5月所有记录归属
2022-05分组,累计结果和你之前的正确计算结果完全一致 - 2022-06-01归属新的
2022-06分组,累加当日Laptop记录数2,累计值为2,符合预期 - 2022-06-02在
2022-06分组内累加当日新增3条记录,累计值为2+3=5,符合预期
内容的提问来源于stack exchange,提问作者Data-7scientist
相关产品推荐
相关产品推荐

