所以我有一个看起来像这样的数据框:

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


前几列只能采用10。我想在第二列上运行一个累积最大值,但是只要我们在第一列中达到1,累积最大值就会重置。我一直在做的方法是遍历并找到1在第一列中的位置,然后在每个部分上做一个cum-max。我希望找到一种更快的方法。

最佳答案

col1 = df[1]
col2 = df[2]
group = (col1.sum() - col1.cumsum()) * (col2.max() + 1)
result = (col2 - group).cummax() + group


此方法比groupby和for循环快得多。

10-08 12:43