【问题标题】:How to fill missing values with similar rows median如何用相似的行中位数填充缺失值
【发布时间】:2018-10-30 05:41:12
【问题描述】:

我如何用相似的行median 为 Titanic 数据集填充缺失值?

我有一个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

现在我想通过考虑其他三列中的相似值来填充Age 列中的NaN。在这种情况下,我有三行样本值作为第 1 行。

   Age SibSp Parch Pclass
0   28   2      1     2
4   30   2      1     2
5   40   2      1     2

Age col 的中位数是 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 或其他方式来实现,但我想不通。有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案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  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
    

    【讨论】:

    • Jezrael,在大型数据集上使用 fillna 是否有任何性能优势,或者我也可以使用 lambda 函数?
    • @Rakesh - 性能不同,我想如果大数据优先解决方案应该更快。
    猜你喜欢
    • 2019-09-26
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多