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

如何基于cummin()函数按cond条件分段计算最小值并赋值

需求说明
  • 计算直到cond列值为True时的最小值;
  • 从cond列值为True的下一行开始,重新计算最小值;
  • 将计算结果赋值给expected列。

输入数据代码

import pandas as pd
import numpy as np

A = [16, 12, 21, 15, 18, 19, 13, 16, 10, 50]
cond = [False, False, True, False, False, True, False, False, True, False]
df = pd.DataFrame({'A': A, 'cond': cond})

预期输出

Acondexpected
016False
112False
221True12
315False12
418False12
519True15
613False15
716False15
810True10
950False10

补充说明:索引5处计算的是索引3到5的最小值;索引8处计算的是索引6到8的最小值。

解决方案代码

# 获取所有cond为True的索引位置
true_indices = df[df['cond']].index.tolist()
start_idx = 0

# 遍历每个True的位置,计算对应区间的最小值并赋值
for idx in true_indices:
    # 计算当前区间的最小值
    current_min = df.loc[start_idx:idx, 'A'].min()
    # 找到下一个True的索引,若没有则取数据末尾的下一个位置
    next_idx = true_indices[true_indices.index(idx)+1] if (true_indices.index(idx)+1 < len(true_indices)) else df.index[-1] + 1
    # 给对应行的expected列赋值
    df.loc[idx:next_idx-1, 'expected'] = current_min
    # 更新下一个区间的起始索引
    start_idx = idx + 1

# 查看结果
print(df)

代码说明

  1. 先提取所有cond为True的行索引,以此作为每个计算区间的终点;
  2. 从数据起始位置开始,逐个区间计算最小值:每个区间是从上个True行的下一行(或数据开头)到当前True行;
  3. 将计算得到的最小值赋值给当前True行,以及到下一个True行之前的所有行;
  4. 循环完成后即可得到符合要求的expected列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:36:31