如何参照另一DataFrame的数据替换当前DataFrame的缺失值
解决方案
你完全可以使用fillna()方法实现需求,以下是两种可行的实现方案:
方案1:复用你已计算好的分组均值表df实现填充
无需重复计算均值,直接利用你已经聚合好的结果匹配填充:
# 第一步:将均值表设置为Types和O_periods为双索引,便于匹配 df_mean = df.set_index(['Types', 'O_periods'])[['S_months', 'incident']] # 第二步:对缺失值表设置相同双索引后填充,之后还原原始索引 df_missing = df_missing.set_index(['Types', 'O_periods']) df_missing[['S_months', 'incident']] = df_missing[['S_months', 'incident']].fillna(df_mean) df_missing = df_missing.reset_index()
方案2:直接在缺失值表上分组填充
如果不需要单独维护均值表的话,可以直接在df_missing上分组计算均值并填充,代码更简洁:
# 填充S_months列缺失值 df_missing['S_months'] = df_missing['S_months'].fillna( df_missing.groupby(['Types', 'O_periods'])['S_months'].transform('mean') ) # 填充incident列缺失值 df_missing['incident'] = df_missing['incident'].fillna( df_missing.groupby(['Types', 'O_periods'])['incident'].transform('mean') )
注意事项
- 若使用方案1,需确保你的均值表
df中不存在重复的(Types, O_periods)分组,否则会出现匹配错误。 - 两种方案均使用的
fillna()方法只会修改缺失值部分,原有非缺失的内容不会被覆盖。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

