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

如何用ffill和bfill填充Pandas DataFrame中含NaN的列?

如何用ffill和bfill填充DataFrame中的NaN列?

核心概念

  • ffill():全称forward fill,向前填充,用当前NaN的前一个非缺失值填充
  • bfill():全称backward fill,向后填充,用当前NaN的后一个非缺失值填充

单独使用一种方法可能覆盖不全场景(比如列开头的NaN用ffill无法填充,列结尾的NaN用bfill无法填充),因此通常组合使用ffill().bfill(),先向前填充所有可填充的NaN,再向后补全剩余缺失值。

针对你的示例场景的解决方案

你的数据中ID列的缺失值与Expected分组强关联(A组对应ID=A,B组对应ID=B),必须分组后填充,避免跨组填充导致逻辑错误:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame([
            [np.nan, '2019-01-01', 'P', 'O', 'A'],
            [np.nan, '2019-01-02', 'O', 'O', 'A'],
            ['A', '2019-01-03', 'O', 'O', 'A'],
            ['A', '2019-01-04', 'O', 'P', 'A'],
            [np.nan, '2019-01-05', 'O', 'P', 'A'],
            [np.nan, '2019-01-01', 'P', 'O', 'B'],
            ['B', '2019-01-02', 'O', 'O', 'B'],
            ['B', '2019-01-03', 'O', 'O', 'B'],
            ['B', '2019-01-04', 'O', 'P', 'B'],
            [np.nan, '2019-01-05', 'O', 'P', 'B'],
            ], columns=['ID', 'Time', 'FromState', 'ToState', 'Expected'])

# 按Expected分组,对每组ID列先向前填充再向后填充
df['ID'] = df.groupby('Expected')['ID'].transform(lambda x: x.ffill().bfill())

补充说明

  1. 如果数据无需分组(整列缺失值对应同一有效值),可直接对列操作:
# 直接填充整列的NaN
df['ID'] = df['ID'].ffill().bfill()
  1. transform方法会将分组内的填充结果映射回原DataFrame,保留原有索引和数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:20:27