python-3.x - 如何重用 df.groupby() 的结果。意味着在另一个数据框中填充NaN?
问题描述
我正在研究泰坦尼克号数据集。
我df['Age']
根据“Sex”和“Pclass”计算平均值,以填充df['Age']
.
代码如下:
import pandas as pd
df = pd.read_csv('train.csv')
df['Age'] = df.groupby(['Sex','Pclass'])['Age'].transform(lambda x:x.fillna(x.mean()))
这工作正常,但现在,在测试集上,我想用训练集中按“性别”和“Pclass”分组的平均年龄值填充 NaN。
我可以通过 轻松获取值df.groupby(['Sex', 'Pclass'])['Age].mean()
,但我不知道如何重用这些值来填充测试数据框中的 NaN。
谁能帮我?
解决方案
使用DataFrame.merge
with 左连接,然后用 with 替换缺失Series.fillna
值DataFrame.pop
:
mean = df1.groupby(['Sex', 'Pclass'], as_index=False)['Age'].mean()
df2 = df2.merge(mean, on=['Sex','Pclass'], how='left', suffixes=('','_'))
df2['Age'] = df2['Age'].fillna(df2.pop('Age_'))
推荐阅读
- google-maps - 是否可以将 3D 模型上传到 Google 地图?
- c64 - “?Out of data error in 60”在我的 C64 mini 上基本
- python - 使用 python 从网络画布中抓取数据
- asp.net - 网络配置上的“位置路径”无法识别的元素错误
- struct - 如何循环查询数据并插入结构?
- rest - Rest Easy Hello world 示例显示 404 not found 错误
- r - Rshiny:使用循环生成动态 HTML
- webpagetest - 网页测试脚本登录失败
- javascript - Is there a way to determine the type of edit used with onEdit in a Google Sheets Script?
- visual-studio-2017 - VS2019 Intellisense 与我战斗。有没有办法至少让它像 VS2017 一样工作?