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

如何按cond条件分段重置计算pandas df.cummin()累积最小值

pandas按条件触发分段累积最小值计算实现

需求说明

  • 计算规则:cond列取值为True时重置分段,从当前行开始对A列执行cummin()累积最小值计算,直到下一次cond为True时再次重置分段,最终结果存入expected列
  • 首次出现cond=True之前的行不启动计算,对应expected值留空

测试输入代码

import pandas as pd
import numpy as np
A=[17,18,21,15,18,19,22,16,30,50,]
cond=[False,True,False,False,False,True,False,False,True,False]
df=pd.DataFrame({'A':A,'cond':cond})

实现代码

核心思路是先通过cond列的累加值生成分组标记,再按分组执行组内累积最小值计算,最后处理前置空值行即可:

# 生成分组ID:每次cond为True时分组号+1,同分段共享同一ID
df['group_id'] = df['cond'].cumsum()
# 按分组计算组内累积最小值
df['expected'] = df.groupby('group_id')['A'].cummin()
# 首次cond=True之前的行(group_id=0)赋值为空,符合需求
df.loc[df['group_id'] == 0, 'expected'] = np.nan
# 清理临时列
df = df.drop(columns='group_id')

预期输出结果

运行代码后得到的结果完全匹配要求:

索引Acondexpected
017FALSENaN
118TRUE18
221FALSE18
315FALSE15
418FALSE15
519TRUE19
622FALSE19
716FALSE16
830TRUE30
950FALSE30

逻辑说明

  • 布尔值做累加运算时,True等价于1、False等价于0,因此cond.cumsum()可以天然实现“每次遇到True就切新分组”的标记效果
  • 该实现为pandas原生向量化运算,无逐行循环,大数据量下性能表现优异
  • 如果需要调整为累积最大值、累积求和等其他分段聚合逻辑,只需要把cummin()替换为对应的cummax()、cumsum()即可

内容的提问来源于stack exchange,提问作者July

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:54:32