如何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
添加回答
举报
0/150
提交
取消