基于Make列的众数填充Model列NaN值的实现与简化方案
按Make分组用Model众数填充缺失值解决方案
问题背景
现有数据集存在缺失值,其中Model列有286个缺失值,这些缺失值分布在21个不同的Make类别下。已通过分组计算得到每个Make对应的Model众数,需求是用对应Make的众数填充Model列的NaN值,并简化流程。
A) 用对应Make的Model众数填充NaN值
可以先将分组得到的众数转换为Make到Model众数的映射字典,再结合fillna()和map()方法完成填充:
# 先获取Make到Model众数的映射字典 make_model_mode = df.groupby('Make')['Model'].apply(lambda x: x.mode().iat[0]).to_dict() # 填充Model列的NaN值 df['Model'] = df['Model'].fillna(df['Make'].map(make_model_mode))
如果已生成df1(各Make对应Model众数的列表),也可以直接将其转为字典使用:
make_model_mode = df1.set_index('Make')['Model'].to_dict() df['Model'] = df['Model'].fillna(df['Make'].map(make_model_mode))
B) 合并众数计算与缺失值填充为一步操作
不需要单独生成众数列表,直接用groupby().transform()在填充时实时计算对应分组的众数,一步完成:
df['Model'] = df['Model'].fillna( df.groupby('Make')['Model'].transform(lambda x: x.mode().iat[0]) )
transform()会为每行返回其所属Make分组的Model众数,直接传递给fillna()即可完成缺失值填充,省去了中间变量的存储步骤。
内容的提问来源于stack exchange,提问作者Juan Vazquez
相关产品推荐
相关产品推荐

