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
相关产品推荐
相关产品推荐

