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

如何通过Groupby高效填充Pandas DataFrame中的NaN值

高效按组替换Pandas DataFrame中的NaN值

针对你需要按组将所有NaN替换为组内非NaN值的需求,最直接高效的方法是结合groupby与transform,一次完成组内填充操作,避免多次fillna或合并的额外开销。

实现代码

首先构造输入数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ['A', 'A', 'A', 'B', 'B', 'B'],
    'col2': [np.nan, np.nan, "'apples'", np.nan, "'bananas'", np.nan]
})

核心填充逻辑:

# 按col1分组,将每组的NaN替换为组内第一个非NaN值
df['col2'] = df.groupby('col1')['col2'].transform(lambda x: x.dropna().iloc[0])

原理说明

  • groupby('col1') 按指定列完成分组
  • transform 将传入的函数应用到每个分组,返回与原DataFrame长度匹配的结果,直接映射回原列
  • x.dropna().iloc[0] 提取每组中的第一个非NaN值(适用于每组仅有唯一非NaN值的场景;若组内有多个非NaN且需统一填充,可根据需求替换为众数、均值等逻辑)

执行后得到的结果与你期望的输出完全一致:

col1col2
A'apples'
A'apples'
A'apples'
B'bananas'
B'bananas'
B'bananas'

性能优势

这种方法只需一次分组遍历即可完成填充,相比先ffill再bfill的两次遍历,或构造新DataFrame合并的方式,在数据量较大时能显著减少处理时间,逻辑也更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:29