首页 > 解决方案 > 基于条件的列中的 Fillna()

问题描述

我创建了一个小字典,其中一个特定的标题被分配了一个中位年龄。

        Age
Title   
Master. 3.5
Miss.   21.0
Mr.     30.0
Mrs.    35.0
other   44.5

现在,我想使用此字典根据该标题填充数据框中单个列中的缺失值。因此,对于缺少“Age”且标题 =“Master.”的行,我想插入值 3.5,依此类推。

我尝试了这段代码,但它不起作用;它不会产生错误,但也不会替换缺失值。我究竟做错了什么?

for title in piv.keys():
    train[["Age"]][train["Title"]==title].fillna(piv[title], inplace=True)

其中“piv”是字典的名称,“train”是数据框的名称。

另外,有没有更优雅的方法来做到这一点?

PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked    Title
0   1   0   3   Braund, Mr. Owen Harris male    22.0    1   0   A/5 21171   7.2500  NaN S   Mr.
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C   Mrs.

{'Master.': 3.5, 'Miss.': 21.0, 'Mr.': 30.0, 'Mrs.': 35.0, 'other': 44.5}

标签: pythonpandasfillna

解决方案


一种选择:

train['Age'] = train.groupby('Title')['Age'].transform(lambda x: x.fillna(x.mean()))

另外的选择:

pivdict = piv.set_index('Title').squeeze().to_dict()

train['Age'] = train['Age'].fillna(train['Title'].map(pivdict))

推荐阅读