Pandas如何计算分组内条件滚动/累积最大值 避免使用慢循环
Pandas条件滚动最大值向量化实现方案
核心实现代码
一行代码即可完成计算,全程无循环,为纯向量化操作:
df['condrolmax_calc'] = df.assign(temp=df['close'].where(df['bool'])).groupby((df['bool'] & ~df['bool'].shift(fill_value=False)).cumsum())['temp'].cummax()
实现原理解析
- 首先通过
df['close'].where(df['bool'])生成临时序列:bool列为True时取对应close值,bool列为False时填充NaN,避免无效值参与最大值计算 - 生成分组键:
(df['bool'] & ~df['bool'].shift(fill_value=False)).cumsum(),每次bool列从False切换为True时分组ID自增1,将连续True区间及后续跟随的False行划分到同一分组 - 按分组键分组后,对每个分组内的临时序列执行
cummax累计最大值计算,自动跳过NaN值,实现遇到False后首个True自动重置最大值的需求
验证说明
执行上述代码后生成的计算结果与你提供的示例condrolmax列完全匹配,性能远高于自定义循环,可直接用于百万行级以上的数据集计算。
内容的提问来源于stack exchange,提问作者plonfat
相关产品推荐
相关产品推荐

