gpt4 book ai didi

python - Pandas :如何计算组内的条件滚动/累积最大值

转载 作者:行者123 更新时间:2023-12-05 02:39:22 25 4
gpt4 key购买 nike

我希望condrolmax 列(基于 close 列) 中实现以下结果(条件滚动/累积最大值)而无需使用非常慢的 for 循环。

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)

我确信可以对其进行矢量化(一个衬里)。有什么建议吗?

再次感谢!

最佳答案

你可以设置组然后使用cummax() ,如下:

# Set group: New group if current row `bool` is True and last row `bool` is False
g = (df['bool'] & (~df['bool']).shift()).cumsum()

# Get cumulative max of column `close` within the group
df['condrolmax'] = df.groupby(g)['close'].cummax()

结果:

print(df)

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
6 4 True 4
7 5 False 5
8 7 False 7
9 5 True 5
10 7 False 7
11 8 False 8
12 6 True 6
13 8 True 8
14 5 False 8
15 5 True 5
16 7 True 7
17 15 True 15
18 16 True 16

关于python - Pandas :如何计算组内的条件滚动/累积最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69162138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com