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

如何在Pandas中结合条件使用ffill和bfill填充缺失值?

条件填充空值:仅当前后非空值相等时填充

问题描述

输入DataFrame:

col
A  100
B  NaN
C  NaN
D  100
E  NaN
F  103

期望输出:

col
A  100
B  100
C  100
D  100
E  NaN
F  103

规则:仅当空值所在区间的前后非空值相等时,用该值填充中间的空值;若前后非空值不等,则空值保留。

解决方案

结合ffill()和bfill()做前后填充,再通过条件判断筛选符合要求的填充值:

import pandas as pd

# 构造输入DataFrame
df = pd.DataFrame({'col': [100, None, None, 100, None, 103]}, index=['A', 'B', 'C', 'D', 'E', 'F'])

# 生成前向、后向填充的临时列
df['ffill_col'] = df['col'].ffill()
df['bfill_col'] = df['col'].bfill()

# 仅当前后填充值相等时替换原空值,否则保留原空值
df['col'] = df.apply(lambda row: row['ffill_col'] if row['ffill_col'] == row['bfill_col'] else row['col'], axis=1)

# 删除临时列
df = df.drop(['ffill_col', 'bfill_col'], axis=1)

print(df)

代码解释

  1. 构造输入:创建对应索引和值的DataFrame,用None对应原问题中的NULL。
  2. 前后向填充:ffill()获取每个位置的最近前向非空值,bfill()获取最近后向非空值。
  3. 条件筛选:逐行检查前后填充值,仅当二者相同时,用该值覆盖原空值;否则保持原空值不变。
  4. 清理临时数据:移除用于判断的临时列,得到最终结果。

运行结果

col
A  100.0
B  100.0
C  100.0
D  100.0
E    NaN
F  103.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:16