如何对Pandas Series按id递增执行布尔逻辑下的累加求和?
Pandas Series 按前置id累加求和方案
你的需求是依次计算从id=0开始,包含所有前置id的len值累加和——比如id=0的和、id=0+1的和、id=0+1+2的和……直到最大的id。用Pandas内置方法就能直接实现,分两种场景处理:
场景1:只计算现有id的累积和(忽略缺失id)
你的Series索引是id,但存在跳号(比如23之后是25,无24),先确保索引按从小到大排序(原数据已升序的话可跳过这步),再用cumsum()计算累积和:
# 假设你的Series变量名为delta_series # 按id(索引)排序,保证顺序正确 sorted_delta = delta_series.sort_index() # 计算累积和 cumulative_sum = sorted_delta.cumsum()
得到的cumulative_sum就是目标结果:每个id对应的数值,就是从id=0到当前id的所有len值之和。比如:
- id=0的累积和为122
- id=1的累积和为122+88=210
- id=2的累积和为210+86=296
- ...
- id=25的累积和为前面所有id(0到23)的len值之和加92
场景2:补全缺失id,计算连续id的累积和
如果需要把缺失的id(如24、26等)也纳入,且这些id的累积和等于前一个存在id的结果,可以先补全索引再计算:
# 生成从0到最大id的连续索引范围 full_id_range = pd.RangeIndex(start=0, end=delta_series.index.max() + 1) # 重新索引,缺失id对应的len值填充为0 full_delta = delta_series.reindex(full_id_range, fill_value=0) # 计算累积和 cumulative_sum_full = full_delta.cumsum()
这样id=24的累积和就和id=23完全一致,因为缺失id的len值为0,累加后数值不变。
内容的提问来源于stack exchange,提问作者Sammy Samiei
相关产品推荐
相关产品推荐

