跟踪 运行 总数,同时减去特定时间戳的值
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
我有一个像这样的 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