【发布时间】:2022-01-24 10:23:48
【问题描述】:
我有一个 pandas 数据框,其中的值需要在每个设备的一个周期内累计,但周期结束标记在另一列(一个易于识别的事件行)。 cumsum 必须一直到它找到这个周期结束标记,然后从零(下一行的第一个值)重新开始。
device_name value end
0 A5 1 False
1 A5 7 False
2 A5 2 True
3 A5 1 False
4 A5 1 False
5 A5 1 False
6 A5 1 True
7 A6 2 False
8 A6 4 False
9 A6 2 False
10 A6 2 True
11 A6 2 False
12 A6 2 False
结果应该是这样的
device_name value end total
0 A5 1 False 1
1 A5 7 False 8
2 A5 2 True 10
3 A5 1 False 1
4 A5 1 False 2
5 A5 1 False 3
6 A5 1 True 4
7 A6 2 False 2
8 A6 4 False 6
9 A6 2 False 8
10 A6 2 True 10
11 A6 2 False 2
12 A6 2 False 4
我尝试了 cumsum,但我无法将一个句点的结尾与另一个句点分开,我可以遍历行,如果我在 df.end.shift(1) 上找到 True,我会忽略最后一个值,但有至少 60000,可能还有更快的方法,有什么建议吗?
【问题讨论】:
-
您的输出不合逻辑,为什么第 2 行没有累积,而第 10 行有?我会认为第 2 行是错误的,应该是 10,如果不是,请更新问题。
-
是的,这是一个错误,我更正了它
-
太好了,谢谢,那么它应该可以按您的预期工作,请告诉我 ;)