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

Pandas实现DataFrame中cond为True行逐行动态比较赋值gg、dd列

按条件逐行更新gg、dd字段实现方案

仅当cond为True时计算gg和dd的值,初始示例数据如下:

high  low   cond    gg    dd   
0    19   17  False   NaN   NaN
1    15   12   False  NaN   NaN
2    18   13   True  19.0  12.0
3    67   56  False   NaN   NaN
4    46   33   True  67.0  13.0
5    86   78   True  86.0  33.0
6    31   15  False   NaN   NaN
7    74   42   True  86.0  15.0
8    53   46  False   NaN   NaN
9    23   11   True  74.0  11.0

核心计算规则

按行号从小到大顺序遍历数据,仅处理cond取值为True的行,cond为False的行gg、dd字段保留原有NaN值即可:

  • 遍历到的第一个cond=True行作为首个有效基准行,保留其初始赋值的gg、dd值,记录这两个值作为后续比较的基准
  • 后续每遇到一个cond=True的行,先取当前行初始的dd值,和上一个有效基准行的gg值做比较
  • 如果当前行初始dd 小于 上一基准行的gg值,直接将当前行的gg、dd替换为上一基准行的对应值,当前行成为新的有效基准行
  • 如果当前行初始dd大于等于上一基准行的gg值,保留当前行初始的gg、dd值,当前行成为新的有效基准行
  • 后续所有比较都以最新生成的有效基准行的gg值为参考基准,重复上述比较、替换、更新基准的流程直到遍历完所有数据

可直接运行的Pandas实现代码

import pandas as pd
import numpy as np

# 构造初始示例数据
df = pd.DataFrame({
    'high': [19, 15, 18, 67, 46, 86, 31, 74, 53, 23],
    'low': [17, 12, 13, 56, 33, 78, 15, 42, 46, 11],
    'cond': [False, False, True, False, True, True, False, True, False, True],
    'gg': [np.nan, np.nan, 19.0, np.nan, 67.0, 86.0, np.nan, 86.0, np.nan, 74.0],
    'dd': [np.nan, np.nan, 12.0, np.nan, 13.0, 33.0, np.nan, 15.0, np.nan, 11.0]
})

# 初始化基准值缓存
last_gg = None
last_dd = None

# 按行遍历
for idx, row in df.iterrows():
    # 跳过cond为False的行
    if not row['cond']:
        continue
    # 第一个有效行直接记录基准值
    if last_gg is None:
        last_gg = row['gg']
        last_dd = row['dd']
        continue
    # 比较当前dd和上一个基准gg
    if row['dd'] < last_gg:
        # 替换为上一基准行的值
        df.loc[idx, 'gg'] = last_gg
        df.loc[idx, 'dd'] = last_dd
    # 更新基准值为当前行的最新值
    last_gg = df.loc[idx, 'gg']
    last_dd = df.loc[idx, 'dd']

# 打印计算结果
print(df)

上述代码完全按照规则逐行迭代,通过缓存最新基准值避免重复回溯历史行,执行效率随数据量线性增长,可直接复用在更大体量的数据集上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:18:21