熊猫填充使用分组和模式



我最近开始使用Pandas,目前正在尝试在我的数据集中插补一些缺失值。

我想根据中位数(对于数字条目(和模式(对于分类条目(估算缺失值。但是,我不想根据我的列GroupBy"make"计算整个数据集的中位数和模式,而是按组计算。

对于数值 NA 值,我执行以下操作:

data = data.fillna(data.groupby("make").transform("median"))

。它工作得很好,并用它们的"make"中位数替换了我所有的数值NA值。

但是,对于分类NA 值,我无法为模式做同样的事情,即将所有分类 NA 值替换为其"make"模式。

有谁知道该怎么做?

您可以将GroupBy.transformif-else一起使用,用于数字medianmode用于分类列:

df = pd.DataFrame({
'A':list('ebcded'),
'B':[np.nan,np.nan,4,5,5,4],
'C':[7,np.nan,9,4,2,3],
'D':[1,3,5,np.nan,1,0],
'F':list('aaabbb'),
'make':list('aaabbb')
})
df.loc[[2,4], 'A'] = np.nan
df.loc[[2,5], 'F'] = np.nan
print (df)
A    B    C    D    F  make
0    e  NaN  7.0  1.0    a     a
1    b  NaN  NaN  3.0    a     a
2  NaN  4.0  9.0  5.0  NaN     a
3    d  5.0  4.0  NaN    b     b
4  NaN  5.0  2.0  1.0    b     b
5    d  4.0  3.0  0.0  NaN     b
<小时 />
f = lambda x: x.median() if np.issubdtype(x.dtype, np.number) else x.mode().iloc[0]
df = df.fillna(df.groupby('make').transform(f))
print (df)
A  B  C  D  F  make
0  e  4  7  1  a     a
1  b  4  7  3  a     a
2  b  4  9  5  a     a
3  d  5  4  0  b     b
4  d  5  2  1  b     b
5  d  4  3  0  b     b   

最新更新