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

如何在start与end条件区间内计算最小值并填充result列

问题:计算指定区间内A列最小值并赋值给result列

需求说明

当start列值为True时开启一个区间,end列值为True时结束该区间,计算区间内A列的最小值,并将结果赋值给result列(区间结束后的行需继承该最小值,直到下一个新区间开启)。

输入代码

import pandas as pd
import numpy as np
A = [6, 12, 21, 15, 18, 19, 13, 9, 10, 50]
cond1 = [False, True, False, False, False, False, True, False, False, False]
cond2 = [False, False, False, True, False, False, False, False, True, False]
df = pd.DataFrame({'A' : A, 'start' : cond1, 'end' : cond2})

预期输出

A  start    end  result
0   6  False  False     NaN
1  12   True  False     NaN
2  21  False  False     NaN
3  15  False   True    12.0
4  18  False  False    12.0
5  19  False  False    12.0
6  13   True  False    12.0
7   9  False  False    12.0
8  10  False   True     9.0
9  50  False  False     9.0

注:索引3的result是索引1-3区间内A列的最小值,索引8的result是索引6-8区间内A列的最小值。

解决方案

通过分组标记、组内计算最小值再向前填充的方式实现:

# 用start列的累积和生成区间分组ID
df['group'] = df['start'].cumsum()
# 仅在end为True时,计算当前组的A列最小值
df['result'] = np.where(df['end'], df.groupby('group')['A'].transform('min'), np.nan)
# 向前填充空值,让区间结束后的行继承最小值
df['result'] = df['result'].ffill()
# 移除辅助分组列
df = df.drop('group', axis=1)

print(df)

逻辑说明

  1. 分组标记:start列的累积和会为每个由start=True开启的区间分配唯一ID,确保每个区间独立分组。
  2. 计算最小值:仅在end=True的行,计算当前分组内A列的最小值并赋值给result。
  3. 向前填充:用ffill()将result的空值填充为上一个有效最小值,实现区间结束后的值继承。

内容的提问来源于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 22:42:09