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

Pandas条件匹配时复制上一行另一列值的实现方法

Pandas按条件新增marker列实现方案

规则说明

需要新增marker列,填充规则如下:

  • 当行同时满足两个条件:①event列取值不为0;②该行上方(当前行之前的所有行)存在input1列值为5的记录时,marker取上一行label列的值
  • 其余不满足条件的行,marker取值为0

实现代码

采用向量化运算实现,无逐行循环,性能适配各类数据规模场景:

import pandas as pd

# 构造原始数据集
df = pd.DataFrame(
    [
        [0, 0, 0, 0, 0],
        [5, 5, 0, 0, 2],
        [5, 5, 0, 0, 2],
        [0, 0, 0, 24, 0],
        [0, 0, 0, 0, 0],
        [5, 0, 5, 0, 3],
        [5, 0, 5, 0, 3],
        [5, 0, 5, 0, 3],
        [0, 0, 0, 25, 0],
        [0, 0, 0, 0, 0]
    ],
    columns=['input1', 'input2', 'input3', 'event', 'label']
)

# 核心处理逻辑
# 标记:截止到上一行,是否出现过input1=5的记录
has_previous_input5 = (df['input1'] == 5).cumsum().shift(1, fill_value=0) > 0
# 拼接筛选条件
fill_condition = (df['event'] != 0) & has_previous_input5
# 按规则赋值,不满足条件填0
df['marker'] = df['label'].shift(1).where(fill_condition, 0).astype(int)

处理结果

执行代码后输出的结果与预期完全一致:

input1  input2  input3  event  label  marker
0       0       0       0      0      0       0
1       5       5       0      0      2       0
2       5       5       0      0      2       0
3       0       0       0     24      0       2
4       0       0       0      0      0       0
5       5       0       5      0      3       0
6       5       0       5      0      3       0
7       5       0       5      0      3       0
8       0       0       0     25      0       3
9       0       0       0      0      0       0

逻辑说明:用cumsum()累计input1=5的出现次数,移位1行后即可得到每行之前是否出现过符合要求的input1记录,再结合event非0的条件筛选需要填充的行,直接取移位后的label列赋值即可,执行效率高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:15:27