如何基于目标值对应的特征均值填充Pandas DataFrame缺失值
按目标值分组填充缺失值解决方案
你遇到的问题核心是未对原DataFrame列进行赋值操作,fillna默认返回填充后的新对象,不会修改原数据。以下是两种可实现原地填充的正确写法:
方法一:赋值回原列
import pandas as pd import numpy as np # 初始化示例数据 df_pk = pd.DataFrame({"f1": [1,2,3,4,5,6,7,8], "f2": [2, np.nan,6, 8, 10, np.nan,14,16], "y": [1,1,1,0,0,1,1,1]}) # 生成每行对应的y分组f2均值 group_f2_means = df_pk.groupby('y')['f2'].transform('mean') # 填充缺失值并覆盖原列 df_pk['f2'] = df_pk['f2'].fillna(group_f2_means)
方法二:使用inplace=True参数原地修改
df_pk['f2'].fillna(df_pk.groupby('y')['f2'].transform('mean'), inplace=True)
填充后结果说明
- y=1分组的f2非缺失值为
[2,6,14,16],均值为9.5,对应两个NaN会被填充为9.5 - y=0分组的f2无缺失值,保持原数据
[8,10] - 最终f2列结果:
[2, 9.5, 6, 8, 10, 9.5, 14, 16]
内容的提问来源于stack exchange,提问作者antony james
相关产品推荐
相关产品推荐

