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

如何在Pandas中仅当前后非NaN值相等时填充对应NaN值

实现方法

要实现这个需求,核心逻辑是为每个NaN值匹配到它前向最近的非空值和后向最近的非空值,只有当两个值相等时,才用这个值填充对应NaN,否则保留原NaN值。

完整代码

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({'A': [1, np.nan, np.nan, np.nan, 3, 3, 3, 3, np.nan, np.nan, np.nan, 5, 5, 5, 6, 6, 6, np.nan, np.nan, np.nan, 6, 7, 8, 9, 10,np.nan, np.nan, 10, 11]})

# 生成每个位置对应的前向最近非空值、后向最近非空值
prev_valid = df['A'].ffill()
next_valid = df['A'].bfill()

# 仅当前后最近非空值相等时填充,否则保留原值
df['fill_nan'] = np.where(prev_valid == next_valid, prev_valid, df['A'])

代码说明

  • ffill():pandas内置的前向填充方法,会沿着列从上到下,用遇到的上一个非空值填充所有后续NaN,直到遇到下一个非空值为止,正好可以得到每个位置的前向最近非空值。
  • bfill():pandas内置的后向填充方法,和ffill()逻辑相反,从下到上填充,得到每个位置的后向最近非空值。
  • np.where(条件, 满足条件返回值, 不满足返回值):用来做条件判断,只有当前后最近非空值相等时,才用该值填充,否则保留原列A的数值(包括原有的NaN)。

运行后得到的fill_nan列和你给出的预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:02