跟踪 运行 总数,同时减去特定时间戳的值

Keeping track of running total whilst subtracting values at certain timestamps

我有一个像这样的 DataFrame:

    time_start            pred      time_end_floor          xyz
0   2022-05-06 12:00:00    26              NaT              NaN 
1   2022-05-06 13:00:00    16              NaT              NaN
2   2022-05-06 14:00:00    10        2022-05-06 14:00:00    4.0
3   2022-05-06 15:00:00    8         2022-05-06 15:00:00    9.0
4   2022-05-06 16:00:00    11        2022-05-06 16:00:00    15.0

我需要计算 运行 总数,同时还要根据 time_end_floor 中的值出现的时间减去值。

EG) 运行 总数像 26+16+10 直到 14:00:00 然后我需要从列 xyz 4 中减去该值。所以我想要在另一列中的值 14:00:00 是 48,因为它是 (26+16+10) - 4。所以 48 进入另一列 14:00:00。

然后下一行将 8 加到 48 上等于 56,但同时减去 9,因此在 15:00:00 的另一列中应该显示 47,依此类推。

在DataFrame的末尾我应该回到0作为最后一个条目。理想情况下希望尽可能快,因为我知道它可以使用 apply() 完成,但可能会导致严重的开销。

确切的预期输出不清楚(你需要轮班吗?),但你可以使用:

df['sum'] = df['pred'].cumsum().sub(df['xyz'].fillna(0, downcast='infer').cumsum())

除非您希望所有 NaN 值都为 26+16+10?这里为 sum2

s = df['pred'].cumsum()
df['sum2'] = s.sub(df['xyz'].cumsum()).fillna(s.mask(df['xyz'].isna()).bfill(), downcast='infer')

输出:

            time_start  pred       time_end_floor   xyz  sum  sum2
0  2022-05-06 12:00:00    26                  NaT   NaN   26    52
1  2022-05-06 13:00:00    16                  NaT   NaN   42    52
2  2022-05-06 14:00:00    10  2022-05-06 14:00:00   4.0   48    48
3  2022-05-06 15:00:00     8  2022-05-06 15:00:00   9.0   47    47
4  2022-05-06 16:00:00    11  2022-05-06 16:00:00  15.0   43    43