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

如何在DataFrame中为满足Condition2的行填充最近Condition1对应值?

问题:基于条件填充最近匹配的前序值

我有如下DataFrame:

IndexValueCondition1Condition2
11TrueFalse
25FalseFalse
33FalseTrue
43FalseFalse
53TrueFalse
66FalseTrue

我希望检测Condition2为True的行,在新列中填充之前最近一行Condition1为True的Value值。期望输出如下:

IndexValueCondition1Condition2New Column
11TrueFalseNone
25FalseFalseNone
33FalseTrue1
43FalseFalseNone
53TrueFalseNone
66FalseTrue3

我尝试用np.where()结合tail()实现,但代码出现语法错误:

df["New Column"] = np.where(df["Condition 2"]==True,df[df["Condition 1"]==True].["Value"].tail(1),None)

由于DataFrame可能很大,我希望用非循环的方式实现需求。


解决方案

可以通过矢量化操作高效实现,步骤如下:

  1. 生成一个序列,仅保留Condition1为True时的Value,其余设为NaN,再通过向前填充(ffill())让每一行继承最近的前序有效Value
  2. 仅在Condition2为True的行保留上述填充后的值,其余行设为None

具体代码

import pandas as pd
import numpy as np

# 生成最近Condition1为True的Value的向前填充序列
last_true_value = df['Value'].where(df['Condition1']).ffill()
# 按Condition2筛选填充新列
df['New Column'] = np.where(df['Condition2'], last_true_value, None)

代码说明

  • df['Value'].where(df['Condition1']):仅保留Condition1为True行的Value,其余行转为NaN
  • .ffill():向前填充NaN,确保每一行都能获取到最近的前序Condition1为True的Value
  • np.where(df['Condition2'], last_true_value, None):根据Condition2的布尔值,决定填充对应值还是None

该方法全程为矢量化操作,无循环,处理大型DataFrame时效率优异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:29