如何基于双列分组均值填充DataFrame中Age列的缺失值
实现方法
你写的框架代码出错是因为 map() 是 Pandas Series 独有的方法,直接对双列组成的 DataFrame 调用 map() 会报错,下面提供两种可行的实现方案:
方案1:基于map的实现(匹配你原来的思路)
你只需要把双列按行拼接为元组,变成单列Series后就可以调用map匹配分组均值:
# 先存储双列分组的Age均值 grouped_age_mean = df.groupby(["col_X","col_Y"])["Age"].mean() # 空值填充 df.loc[df['Age'].isnull(),'Age'] = df[['col_X',"col_Y"]].apply(tuple, axis=1).map(grouped_age_mean)
这里的分组均值grouped_age_mean本身是MultiIndex结构的Series,刚好可以和两列组成的元组key一一对应,完成映射填充。
方案2:更简洁的transform实现
用transform可以直接把分组均值广播到每个对应分组的行上,配合fillna直接完成填充,代码更精简:
df['Age'] = df['Age'].fillna(df.groupby(["col_X","col_Y"])["Age"].transform('mean'))
这个方法不需要单独筛选空值行,fillna会自动只替换空值位置,执行效率也更高。
内容的提问来源于stack exchange,提问作者Keperoze
相关产品推荐
相关产品推荐

