【发布时间】:2021-11-08 17:08:32
【问题描述】:
我希望在不使用极其缓慢的 for 循环的情况下在 condrolmax 列(基于 close 列)(条件滚动/累积最大值)中实现以下结果。
Index close bool condrolmax
0 1 True 1
1 3 True 3
2 2 True 3
3 5 True 5
4 3 False 5
5 3 True 3 --> rolling/accumulative maximum reset (False cond above)
6 4 True 4
7 5 False 4
8 7 False 4
9 5 True 5 --> rolling/accumulative maximum reset (False cond above)
10 7 False 5
11 8 False 5
12 6 True 6 --> rolling/accumulative maximum reset (False cond above)
13 8 True 8
14 5 False 8
15 5 True 5 --> rolling/accumulative maximum reset (False cond above)
16 7 True 7
17 15 True 15
18 16 True 16
创建此数据框的代码:
# initialise data of lists.
data = {'close':[1,3,2,5,3,3,4,5,7,5,7,8,6,8,5,5,7,15,16],
'bool':[True, True, True, True, False, True, True, False, False, True, False,
False, True, True, False, True, True, True, True],
'condrolmax': [1,3,3,5,5,3,4,4,4,5,5,5,6,8,8,5,7,15,16]}
# Create DataFrame
df = pd.DataFrame(data)
我确信可以将其矢量化(一个衬里)。有什么建议吗?
再次感谢!
【问题讨论】:
-
选择的答案是没有按照你的要求做,所以这个答案或者你的问题有错误,你能澄清一下吗?
-
请注意,问题是在
condrolmax列中实现预期的结果,这在问题中清楚地显示。术语rolling可能无法准确描述需求,也不需要我们在解决方案中使用rolling()函数。只是问题的措辞问题。 -
没有提到
rolling()的窗口大小(如果适用),窗口大小实际上可以根据bool列的模式而变化。因此,如果要使用滚动功能,最好是expanding()而不是rolling()。在这种情况下,在组内使用cummax()会更直接。这就是我们选择cummax()而不是rolling.max()的原因。
标签: python pandas conditional-statements