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

Pandas无需循环实现零值间隔的time_diff分段累加赋值给time_adder的方法

解决方案

可以通过pandas向量化操作实现,完全避免Python层面的循环,性能比while循环提升1~2个数量级,具体实现逻辑如下:

核心思路

利用cumsum生成分组标识:每遇到time_adder初始值为0的位置,分组编号+1,同一个分组内的time_diff值做累计求和即可,初始为0的位置直接保留原值不参与计算。

完整代码

import pandas as pd
from datetime import timedelta

# ========== 核心实现 ==========
# 1. 标记需要计算的位置:排除初始time_adder为0的行
calc_mask = df['time_adder'] != 0
# 2. 生成分组ID,每遇到0就进入新的分组
df['group_id'] = (df['time_adder'] == 0).cumsum()
# 3. 按分组计算time_diff的累计和,赋值给对应位置
df.loc[calc_mask, 'time_adder'] = df[calc_mask].groupby('group_id')['time_diff'].cumsum()
# 4. 可选:删除临时生成的group_id列
df.drop('group_id', axis=1, inplace=True)

效果验证

以你给出的数值示例验证:

  • 初始time_adder:[0, 0, NaN, NaN, NaN, NaN, 0, 0, NaN, NaN, 0...]
  • 对应time_diff:[1,2,1,2,3,4,1,3,5,6...]
  • 计算后time_adder:[0, 0, 1, 3, 6, 10, 0, 0, 5, 11, 0...],完全符合预期输出。

对于timedelta类型的time_diff,pandas原生支持cumsum运算,无需额外做类型转换,也符合你的时间差累加需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:21:03