猿问

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

如何median为泰坦尼克号数据集填充类似行的缺失值?


我有一Age列有 80 个缺失值,我想通过取其他列的相似行的中位数来填充这些缺失值。['SibSp', 'Parch', 'Pclass']


假设这个例如:


    Age SibSp Parch Pclass

0   28   2      1     2

1  NaN   2      1     2

2   30   3      3     1

3   40   4      3     3

4   30   2      1     2

5   40   2      1     2

现在我想,以填补NaN在Age考虑其他三列类似的值列。在这种情况下,我有三行样本值作为第 1 行。


   Age SibSp Parch Pclass

0   28   2      1     2

4   30   2      1     2

5   40   2      1     2

Agecol的中位数是 30。所以用 30 填充 NaN。


所需的输出。


    Age SibSp Parch Pclass

0   28   2      1     2

1   30   2      1     2  # Fill with median of those above three rows.

2   30   3      3     1

3   40   4      3     3

4   30   2      1     2

5   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或其他东西,但我无法弄清楚。任何人都可以帮忙吗?


谢谢你。


手掌心
浏览 193回答 1
1回答

繁星淼淼

使用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  Pclass0  28.0      2      1       21  30.0      2      1       22  30.0      3      3       13  40.0      4      3       34  30.0      2      1       25  40.0      2      1       2
随时随地看视频慕课网APP

相关分类

Python
我要回答