mt1*_*212 2 python group-by pandas fillna pandas-groupby
我最近开始使用 Pandas,目前我正在尝试估算数据集中的一些缺失值。
我想根据中位数(对于数字条目)和模式(对于分类条目)来估算缺失值。但是,我不想计算整个数据集的中位数和众数,而是基于GroupBy名为"make".
对于数值,我做了以下工作:
data = data.fillna(data.groupby("make").transform("median"))
Run Code Online (Sandbox Code Playgroud)
--> 这完美地工作,并用NA它们的中位数替换了我所有的数值"make"。
但是,我无法为模式做同样的事情,即将所有分类 NA 值替换为它们的"make".
有谁知道怎么做?
您可以将GroupBy.transformwith if-elseformedian用于数字和mode分类列:
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'),
'G':list('aaabbb')
})
df.loc[[2,4], 'A'] = np.nan
df.loc[[2,5], 'F'] = np.nan
print (df)
A B C D F G
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
Run Code Online (Sandbox Code Playgroud)
f = lambda x: x.median() if np.issubdtype(x.dtype, np.number) else x.mode().iloc[0]
df = df.fillna(df.groupby('G').transform(f))
print (df)
A B C D F G
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |