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

如何用相似的行中位数填充缺失值

如何用相似的行中位数填充缺失值

手掌心 2021-07-29 17:12:49
如何median为泰坦尼克号数据集填充类似行的缺失值?我有一Age列有 80 个缺失值,我想通过取其他列的相似行的中位数来填充这些缺失值。['SibSp', 'Parch', 'Pclass']假设这个例如:    Age SibSp Parch Pclass0   28   2      1     21  NaN   2      1     22   30   3      3     13   40   4      3     34   30   2      1     25   40   2      1     2现在我想,以填补NaN在Age考虑其他三列类似的值列。在这种情况下,我有三行样本值作为第 1 行。   Age SibSp Parch Pclass0   28   2      1     24   30   2      1     25   40   2      1     2Agecol的中位数是 30。所以用 30 填充 NaN。所需的输出。    Age SibSp Parch Pclass0   28   2      1     21   30   2      1     2  # Fill with median of those above three rows.2   30   3      3     13   40   4      3     34   30   2      1     25   40   2      1     2这是我写的东西,但它不起作用。# Filling missing values Of Age.for i in combined.Age[combined.Age.isna()].index.tolist():    age_med = combined.Age.median()    mask1 = combined.SibSp.eq(combined.iloc[i].SibSp)    mask2 = combined.Parch.eq(combined.iloc[i].Parch)    mask3 = combined.Pclass.eq(combined.iloc[i].Pclass)    age_pred = combined.Age[mask1 & mask2 & mask3].median()    combined.iloc[i]['Age'] = age_pred我确信有更好的方法来使用它groupby或其他东西,但我无法弄清楚。任何人都可以帮忙吗?谢谢你。
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

使用GroupBy.transform退货median与相同尺寸Series和原版一样DataFrame,所以有可能使用fillna:


med = df.groupby(['SibSp', 'Parch', 'Pclass'])['Age'].transform('median')

df['Age'] = df['Age'].fillna(med)

或使用 lambda 函数的类似解决方案:


df['Age'] = (df.groupby(['SibSp', 'Parch', 'Pclass'])['Age']

               .transform(lambda x: x.fillna(x.median())))


print (df)

    Age  SibSp  Parch  Pclass

0  28.0      2      1       2

1  30.0      2      1       2

2  30.0      3      3       1

3  40.0      4      3       3

4  30.0      2      1       2

5  40.0      2      1       2


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

添加回答

举报

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