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

pandas中groupby分组后使用分组均值填充NaN缺失值的方法

pandas 按分组均值填充列中NaN值实现方案

核心实现代码

注意原示例代码用到np.nan需要先导入numpy库,完整实现如下,完全匹配调用df['cr'].fillna方法的需求:

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'id': [1, 2, 3, 4, 5, 6],
                   'm': ['m1','m1','m1','m2','m2', 'm2'],
                   'cr':[0.5, 0.3, np.nan, 0.4, 0.5, np.nan]
                 })

# 按m列分组取cr列组内均值,transform会将均值匹配到每一行对应位置,传入fillna完成填充
df['cr'] = df['cr'].fillna(df.groupby('m')['cr'].transform('mean'))

填充效果

执行代码后打印df,可以看到缺失值已经被对应分组的均值填充:

id   m    cr
0   1  m1  0.50
1   2  m1  0.30
2   3  m1  0.40
3   4  m2  0.40
4   5  m2  0.50
5   6  m2  0.45

其中m1组cr列有效值为0.5、0.3,均值0.4,填充了id=3的缺失值;m2组cr列有效值为0.4、0.5,均值0.45,填充了id=6的缺失值。

实现说明

  • groupby('m')['cr'].transform('mean')会返回和原cr列长度、索引完全一致的序列,每个位置的值是该行所属分组的cr列均值,不需要额外做索引对齐操作
  • 如果不想覆盖原始cr列,可以将填充结果赋值到新列,比如df['cr_filled'] = df['cr'].fillna(df.groupby('m')['cr'].transform('mean'))
  • 若分组下cr列全为NaN,对应位置填充结果仍为NaN,不会抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:24:30