为了账号安全,请及时绑定邮箱和手机立即绑定

根据一列的聚合在一列中填充空值

根据一列的聚合在一列中填充空值

喵喵时光机 2022-08-16 18:45:50
我正在学习一些基本的数据科学,我正在研究泰坦尼克号数据集。“年龄”列具有空值,我想用其他列的平均值填充,例如“Pclass”或“”。“P舱”是指乘客舱位,根据乘客是否持有1等舱、2等舱或3等舱机票,有三个值(1、2、3)。我试图通过编写一个函数来概括此过程,该函数采用两个列名,“Age”和我们要用于聚合的列。我想不出如何完全概括这一点,所以现在,假设我基于Pclass进行聚合。我根据Pclass得到了平均年龄,如下所示:# Figure out the mean age for each classmean_age = round(df_train.groupby('Pclass').mean()['Age'])mean_age我试图定义如下函数(38,30和25)来自mean_age:def fill_age(data, col1, col2):    if data[col1].isnull():        if data[col2] == 1:            return 38        elif data[col2] == 2:            return 30        else:            return 25    else:        return data[col1]并尝试使用 .apply():df_train['Age'] = df_train.apply(fill_age(df_train,'Age','Pclass'), axis = 1)我在这里犯了什么错误,我该如何思考这个问题来修复它并进一步推广它?编辑:以下行似乎已经工作,但我需要它来将更改应用于数据帧本身,并且我不能将“就地”与.apply()一起使用df_train.groupby('Pclass')['Age'].apply(lambda x: x.fillna(round(x.mean())))
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您不应在 中调用函数,而应通过 或 关键字参数传递函数和参数:applyargs=()

df['Age'] = df.apply(fill_age, col1='Age', col2='Pclass', axis=1)

但是有更好的方法可以通过矢量化来做到这一点:

df['Age'] = df['Age'].fillna(df.groupby('Pclass')['Age'].transform('mean'))


查看完整回答
反对 回复 2022-08-16
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信