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

Pandas如何实现ffill前向填充,直到另一列off条件触发时停止?

实现方案

核心思路是先标记每次状态切换的节点,再通过前向填充维持状态,遇到off信号时重置状态为0,全程使用向量化操作,性能优于逐行遍历的写法。

代码实现

import pandas as pd
import numpy as np

# 构造示例DataFrame
d1 = {'on?': [0,1,0,0,0,1,0,0,0], 'off?': [0,0,0,1,0,0,0,0,0], 'value': [0,1,1,0,0,1,1,1,1]}
df = pd.DataFrame(d1)

# 核心逻辑
# 1. 标记状态切换点:on=1时设为1,off=1时设为0,其余位置留空
df['state'] = np.select(
    [df['on?'] == 1, df['off?'] == 1],
    [1, 0],
    default=np.nan
)
# 2. 前向填充状态,初始空值填充为0
df['value'] = df['state'].ffill().fillna(0).astype(int)
# 可选:删除临时生成的state列
df = df.drop('state', axis=1)

输出验证

运行代码后得到的value列和你给出的示例预期完全一致:

indexon?off?value
0000
1101
2001
3010
4000
5101
6001
7001
8001

注意事项

  • 如果存在同一行on?和off?同时为1的情况,可以调整np.select的条件顺序,靠前的条件优先级更高。
  • 该方法为pandas原生向量化操作,性能远高于逐行遍历,适合处理百万行以上的大数据量DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:06:04