用各自的平均值填充Null值

时间:2018-08-14 14:11:23

标签: python pandas kaggle

我有一个如下的数据集-

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空值。

1 个答案:

答案 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