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

如何使用pd.Series.ffill()仅对列中特定值执行前向填充

实现方案

可以实现该需求,无法直接调用pd.Series.ffill()单独完成,配合分组掩码限定填充范围即可实现,步骤如下:

1. 构造测试数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'time': range(11),
    'data': [1, 1, np.nan, np.nan, 6, np.nan, np.nan, np.nan, 5, 4, np.nan]
})

2. 核心实现代码

s = df['data'].copy()
# 按非空值拆分分组,每个分组对应一个非空值和后续的连续空值
group = s.notna().cumsum()
# 判断每个分组的首值是否属于允许触发填充的范围(1或4)
allow_fill_mask = s.groupby(group).transform('first').isin([1, 4])
# 仅对允许填充的分组执行前向填充,其余位置保留原值
df['data'] = s.where(~allow_fill_mask, s.ffill())

3. 输出结果验证

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

time  data
0     0   1.0
1     1   1.0
2     2   1.0
3     3   1.0
4     4   6.0
5     5   NaN
6     6   NaN
7     7   NaN
8     8   5.0
9     9   4.0
10   10   4.0

实现逻辑说明

  • s.notna().cumsum()会对每一段「非空值+后续连续空值」分配唯一的分组编号,每个分组的第一个元素就是该段空值的前向参考值
  • 通过分组判断参考值是否为1或4,生成允许填充的掩码,仅在掩码为True的区域执行ffill,其余区域保留原始空值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:54:03