如何基于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})
预期输出
| A | cond | expected | |
|---|---|---|---|
| 0 | 16 | False | |
| 1 | 12 | False | |
| 2 | 21 | True | 12 |
| 3 | 15 | False | 12 |
| 4 | 18 | False | 12 |
| 5 | 19 | True | 15 |
| 6 | 13 | False | 15 |
| 7 | 16 | False | 15 |
| 8 | 10 | True | 10 |
| 9 | 50 | False | 10 |
补充说明:索引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)
代码说明
- 先提取所有
cond为True的行索引,以此作为每个计算区间的终点; - 从数据起始位置开始,逐个区间计算最小值:每个区间是从上个
True行的下一行(或数据开头)到当前True行; - 将计算得到的最小值赋值给当前
True行,以及到下一个True行之前的所有行; - 循环完成后即可得到符合要求的
expected列。
内容的提问来源于stack exchange,提问作者July
相关产品推荐
相关产品推荐

