如何用Pandas计算可归零递增列的分段总和?
Pandas高效实现分段增量总和计算
核心思路
用Pandas的向量化操作生成分组标签,再通过分组聚合计算目标值,完全替代低效的for循环。
具体步骤
假设你的数据集已加载为df,目标列为Extruder1:
生成分组标签
以Extruder1等于0为分割点,每次遇到0就开启一个新分组,确保连续的非零段(含前置的0分隔行)被分到同一组:df['group_id'] = (df['Extruder1'] == 0).cumsum()计算相邻行的差值
用diff()快速得到当前行与前一行的数值差:df['delta'] = df['Extruder1'].diff()分组聚合计算分段总和
对每个分组的差值求和,第一个分组的初始差值为NaN,用fillna(0)处理:segment_total = df.groupby('group_id')['delta'].sum().fillna(0)
针对你的示例数据验证
- 第一段(group_id=0):id157-159的差值为
1563-1560=3、1563-1563=0,总和为3,匹配你的需求。 - 第二段(group_id=1):id160-163的差值为
2-0=2、4-2=2、6-4=2,总和为6,完全符合你的描述。
简化写法(无需保留中间列)
用链式调用压缩代码,避免生成临时列:
segment_total = ( df.assign( group_id=lambda x: (x['Extruder1'] == 0).cumsum(), delta=lambda x: x['Extruder1'].diff() ) .groupby('group_id')['delta'] .sum() .fillna(0) )
这种方法基于Pandas原生向量化运算,处理大规模数据集时效率远高于for循环。
内容的提问来源于stack exchange,提问作者Parker3306
相关产品推荐
相关产品推荐

