Pandas DataFrame按Cycle分组实现重置式累计时间计算
问题根因
原代码先对全量Total Time做全局差分,再按周期分组累加,存在两个逻辑漏洞:
- 跨周期的相邻行时间差会被划入新周期的首个差分结果,导致新周期初始值不为0
- 没有以每个周期自身的起始时间作为累计基准,无法实现周期切换时计数器完全重置
修正方案
不需要做全局差分+分组累加,直接以每个周期内第一条记录的Total Time作为该周期的计时零点,每行时间减去所属周期的零点时间,即可得到准确的周期内累计时长,天然满足重置要求。
实现代码
import pandas as pd df = pd.DataFrame({"Cycle": [1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,5,5], "Total Time": [0,0.2,0.2,0.4,0.4,0.7,0.7,1.0,1.0,1.2,1.3,1.3,1.5,1.6,1.6,1.8,1.8]}) # 取每个周期第一条记录的时间作为周期起始基准,当前时间减基准值即周期内累计时长 df['Cycle Time'] = df['Total Time'] - df.groupby('Cycle')['Total Time'].transform('first') print(df['Cycle Time'])
运行输出
0 0.0 1 0.2 2 0.2 3 0.0 4 0.0 5 0.3 6 0.3 7 0.0 8 0.0 9 0.2 10 0.0 11 0.0 12 0.2 13 0.0 14 0.0 15 0.2 16 0.2 Name: Cycle Time, dtype: float64
输出结果和预期完全一致,不存在跨周期计算误差,周期切换时首行值自动重置为0。
内容的提问来源于stack exchange,提问作者Murray Ross
相关产品推荐
相关产品推荐

