我有一个如下的数据集-
alldata.loc[:,["Age","Pclass"]].head(10)
Out[24]:
Age Pclass
0 22.0 3
1 38.0 1
2 26.0 3
3 35.0 1
4 35.0 3
5 NaN 3
6 54.0 1
7 2.0 3
8 27.0 3
9 14.0 2
现在,我想用该Age
类型的所有Age
值的平均值来填充Pclass
中的所有空值。
示例-
在以上针对Age
的{{1}}空值的代码段中,它取了属于Pclass = 3
的所有年龄的平均值。因此,请替换Pclass = 3
的空值。
我使用Age = 22.4
尝试了一些解决方案,但是它仅更改了特定的groupby
值,并将其余字段转换为null。在这种情况下,如何实现Pclass
空值。
答案 0 :(得分:3)
您可以使用
1] transform
和lambda函数
In [41]: df.groupby('Pclass')['Age'].transform(lambda x: x.fillna(x.mean()))
Out[41]:
0 22.0
1 38.0
2 26.0
3 35.0
4 35.0
5 22.4
6 54.0
7 2.0
8 27.0
9 14.0
Name: Age, dtype: float64
或使用
2] fillna
上的mean
In [46]: df['Age'].fillna(df.groupby('Pclass')['Age'].transform('mean'))
Out[46]:
0 22.0
1 38.0
2 26.0
3 35.0
4 35.0
5 22.4
6 54.0
7 2.0
8 27.0
9 14.0
Name: Age, dtype: float64
或使用
3] loc
替换null
值
In [47]: df.loc[df['Age'].isnull(), 'Age'] = df.groupby('Pclass')['Age'].transform('mean')
In [48]: df
Out[48]:
Age Pclass
0 22.0 3
1 38.0 1
2 26.0 3
3 35.0 1
4 35.0 3
5 22.4 3
6 54.0 1
7 2.0 3
8 27.0 3
9 14.0 2