我有一个如下所示的数据框:
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。我希望找到一种更快的方法。
col1 = df[1]
col2 = df[2]
group = (col1.sum() - col1.cumsum()) * (col2.max() + 1)
result = (col2 - group).cummax() + group
此方法比groupby和for循环快得多。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。