所以我有一个看起来像这样的数据框:
2019-01-09 13:00:00-06:00 0.0 5264.927000
2019-01-09 13:05:00-06:00 1.0 5264.927028
2019-01-09 13:10:00-06:00 0.0 5244.075097
2019-01-09 13:15:00-06:00 0.0 5226.784019
2019-01-09 13:20:00-06:00 0.0 5235.085161
2019-01-09 13:25:00-06:00 0.0 5246.221935
2019-01-09 13:30:00-06:00 0.0 5232.491797
2019-01-09 13:35:00-06:00 0.0 5231.456668
2019-01-09 13:40:00-06:00 0.0 5234.495478
2019-01-09 13:45:00-06:00 0.0 5242.245801
2019-01-09 13:50:00-06:00 0.0 5241.228244
2019-01-09 13:55:00-06:00 0.0 5239.997655
2019-01-09 14:00:00-06:00 0.0 5243.712108
2019-01-09 14:05:00-06:00 0.0 5247.304100
2019-01-09 14:10:00-06:00 0.0 5250.996665
2019-01-09 14:15:00-06:00 0.0 5254.568331
2019-01-09 14:20:00-06:00 0.0 5254.568000
2019-01-09 14:25:00-06:00 1.0 5261.586980
2019-01-09 14:30:00-06:00 0.0 5262.187910
2019-01-09 14:35:00-06:00 0.0 5257.388773
2019-01-09 14:40:00-06:00 0.0 5255.861004
2019-01-09 14:45:00-06:00 0.0 5248.942361
2019-01-09 14:50:00-06:00 0.0 5246.232192
2019-01-09 14:55:00-06:00 0.0 5252.215607
2019-01-09 15:00:00-06:00 0.0 5252.628778
2019-01-09 15:05:00-06:00 0.0 5253.012436
2019-01-09 15:10:00-06:00 0.0 5248.225834
2019-01-09 15:15:00-06:00 0.0 5245.495417
2019-01-09 15:20:00-06:00 0.0 5240.674316
2019-01-09 15:25:00-06:00 0.0 5242.054722
第一列只能包含1
或0
。我想在第二列上运行一个累积最大值,但是只要我们在第一列中达到1,累积最大值就会重置。我一直在做的方法是遍历并找到1在第一列中的位置,然后在每个部分上做一个cum-max。我希望找到一种更快的方法。
答案 0 :(得分:2)
col1 = df[1]
col2 = df[2]
group = (col1.sum() - col1.cumsum()) * (col2.max() + 1)
result = (col2 - group).cummax() + group
此方法比groupby和for循环快得多。