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

Pandas如何非循环新增依赖上一行列值的DataFrame列

Pandas无循环实现按规则逐行填充新增列

你描述的填充逻辑不需要写显式Python循环,直接用Pandas内置的向量化操作就能实现,运行效率远高于逐行循环,尤其适合大数据量场景。

实现思路

核心逻辑拆成两步即可完全匹配三条填充规则:

  • 先标记所有需要直接取当前行Value的行:包括从未出现过Dummy_Variable=1的前置行,以及当前行Dummy_Variable=1的行,其余行先设为空值
  • 对空值做向前填充(ffill),自动继承上一行的Placeholder取值,覆盖剩余规则场景

完整实现代码

import pandas as pd

# 构造原始DataFrame
data = {'Value': [1000, 1020, 1011, 1010, 1030, 950, 1001, 1100, 1121, 1131],
        'Dummy_Variable': [0,0,1,0,0,0,1,0,1,1]
       }
df = pd.DataFrame(data)

# 计算Dummy_Variable的累计和,判断是否已经出现过值为1的行
cumsum_dummy = df['Dummy_Variable'].cumsum()

# 第一步:给需要直接取当前Value的行赋值
df['Placeholder'] = df['Value'].where(
    (cumsum_dummy == 0) | (df['Dummy_Variable'] == 1)
)
# 第二步:向前填充空值,匹配0值行继承上一行结果的规则,最后转整数和预期格式对齐
df['Placeholder'] = df['Placeholder'].ffill().astype(int)

# 输出结果验证
print(df)

逻辑对应说明

  • 规则1(当前行之前所有Dummy_Variable均为0时取当前Value):通过cumsum_dummy == 0判断,累计和为0代表从第一行到当前行从未出现过Dummy=1,直接取当前Value
  • 规则2(当前行Dummy_Variable为1时取当前Value):通过df['Dummy_Variable'] == 1判断,直接取当前Value
  • 规则3(当前行Dummy为0且上一行Placeholder大于0时取上一行值):这部分行在第一步赋值时为空,ffill()会自动沿用上一行最近的非空Placeholder值,完全符合要求

运行代码后得到的结果和给出的预期DataFrame完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:15:34