如何用Pandas按分组列的平均值填充NaN缺失值
按分组平均值填充DataFrame缺失值
原始数据
初始DataFrame代码及数据如下:
import pandas as pd df = pd.DataFrame({ "species":["cat","dog","dog","cat","cat"], "weight":[5,4,3,7,None], "length":[12,None,13,14,15], })
输出的初始数据:
species weight length 0 cat 5.0 12.0 1 dog 4.0 NaN 2 dog 3.0 13.0 3 cat 7.0 14.0 4 cat NaN 15.0
需求说明
用对应species分组的各列平均值填充缺失数据:
- 行1的
length缺失值,用狗(dog)的平均长度13填充 - 行4的
weight缺失值,用猫(cat)的平均体重6((5+7)/2)填充
解决方案
通过groupby结合transform生成与原DataFrame结构匹配的分组均值数据,直接传入fillna的value参数即可完成填充:
# 生成对应分组的均值DataFrame group_means = df.groupby('species').transform('mean') # 填充缺失值 df_filled = df.fillna(value=group_means)
填充后的结果:
species weight length 0 cat 5.0 12.0 1 dog 4.0 13.0 2 dog 3.0 13.0 3 cat 7.0 14.0 4 cat 6.0 15.0
原理说明
df.groupby('species').transform('mean')会为每一行计算其所属species分组的各列平均值,生成的结果与原DataFrame的索引、列名完全一致,比如行1对应dog分组,length列值为dog组的平均长度13;行4对应cat分组,weight列值为cat组的平均体重6。- 将这个结果传给
fillna的value参数,pandas会自动用对应位置的均值填充原DataFrame的缺失值。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

