You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中计算Series累积最大值遇0时重置的实现方法

带0值重置规则的Pandas累积最大值实现方案

需求说明

实现适配特殊规则的Pandas Series累积最大值计算:

  • 基础逻辑:按序列顺序逐位计算截至当前位置的最大值
  • 重置规则:序列中出现值为0的元素时,立刻清空之前的累积最大值基准,从0之后的元素重新开始累积取最大值
  • 示例校验基准:
    • 输入序列:[100, 102, 101, 103, 0, 12, 123, 14]
    • 期望输出:[100, 102, 102, 103, 0, 12, 123, 123]

最优实现方案(向量化高性能)

核心思路是先按0的位置把序列拆成独立计算段,每个段内单独做常规累积最大值计算,全程用pandas原生向量化操作,没有逐行循环开销,处理大数据量性能很好。

import pandas as pd

# 构造示例输入
s = pd.Series([100, 102, 101, 103, 0, 12, 123, 14])

# 生成分组标记:每遇到一个0,分组编号+1,完成分段切割
split_flag = (s == 0).cumsum()

# 分组计算组内累积最大值,直接得到目标结果
result = s.groupby(split_flag).cummax()

运行后打印result.tolist()就能得到和预期完全一致的输出。

逻辑拆解

  • 分组标记的生成逻辑:先把序列转成「元素是否等于0」的布尔序列,对布尔序列做累计求和。没碰到0的时候布尔值是False(等价于0),累计值保持不变;碰到0的时候布尔值是True(等价于1),累计值自动加1,刚好把序列拆成「开头到第一个0之前」「第一个0到第二个0之前」的独立分段。
  • 每个分段内调用原生cummax()时,0作为分段的第一个元素,累积最大值自然是0本身,后面的元素在分段内正常逐位取最大值,完全匹配「遇0重置基准」的要求,不需要额外写判断逻辑。

如果是极小数据量的场景,也可以写逐行遍历的循环实现,但性能会比上面的向量化方案差几个数量级,不推荐用在生产环境或大数据集上。


内容的提问来源于stack exchange,提问作者R. Aakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:51:10