如何相对于与B列相关的平均值替换A列中的NaN值?

时间:2019-02-17 18:01:48

标签: python pandas

我正在研究著名的Titanic dataset。 我正在尝试用X.Age.isna()填充Avg_Age_byTitle NaN值,这是我使用X.groupby('Name').mean()['Age']

计算得出的
Avg_Age_byTitle =
    Name
     Capt            70.000000
     Col             58.000000
     Don             40.000000
     Dr              42.000000
     Jonkheer        38.000000
     Lady            48.000000
     Major           48.500000
     Master           4.574167
     Miss            21.773973
     Mlle            24.000000
     Mme             24.000000
     Mr              32.368090
     Mrs             35.898148
     Ms              28.000000
     Rev             43.166667
     Sir             49.000000
     the Countess    33.000000
    Name: Age, dtype: float64

我尝试了这个X.Age[Avg_Age_byTitle[X.Name[ X.Age.isna()]]],它返回series,其中Age作为索引,NaN作为值。怎么了?

3 个答案:

答案 0 :(得分:0)

您需要的IIUC:

df['Age'] = df.groupby('Pclass')['Age'].apply(lambda x: x.fillna(x.mean())).round(1)

这根据Pclass组的平均值填充了年龄的NaN。

答案 1 :(得分:0)

鉴于 X Avg_Age_byTitle 都以 Name 作为索引,您可以尝试:

    X[['Age']] = X[['Age']].fillna(Avg_Age_byTitle)

答案 2 :(得分:0)

谢谢。 解决方案:

X.Age = X.groupby(['Name']).Age.apply(lambda X : X.fillna(X.mean()))