python - 基于条件的列中的 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}
解决方案
一种选择:
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))
推荐阅读
- html - 如何在 React 中导入 CSS?
- amazon-web-services - 连接到 AWS 云中的实例时出错
- c# - 如何搜索通配符
- postgresql - 在多个 gunicorn worker 中使用多个数据库池连接
- apache - apache:仅当 url 匹配而没有查询时才重定向
- vba - Vlookup 类型不匹配
- text - strophe连接有什么办法禁止查看明文密码?
- postgresql - Postgresql 安装程序窗口显示奇怪的错误消息
- swift - 使用 EventKit 在 iOS/Swift 中创建自定义日历
- javascript - 为什么我不能在 mysql 回调函数上定义“this”