我有一个包含" #NA ####"的数据框。我想用组均值来回填这个值。
我知道我可以先替换#34; #NA ####"使用np.NAN,然后使用pd.fillna,但还有更方便的方法吗?
答案 0 :(得分:0)
<强>设置强>
df
Group Value
0 1 10
1 1 #NA###
2 3 5
3 2 10
4 2 #NA###
5 3 #NA###
6 1 40
7 2 #NA###
8 3 100
9 1 20
调用pd.to_numeric
,将这些字符串强制转换为NaN。
df.Value = pd.to_numeric(df.Value, errors='coerce')
现在,按Group
分组,并使用fillna
致电mean
-
df = df.set_index('Group').Value\
.fillna(df.groupby('Group').mean().Value)\
.reset_index()
df
Group Value
0 1 10.000000
1 1 23.333333
2 3 5.000000
3 2 10.000000
4 2 10.000000
5 3 52.500000
6 1 40.000000
7 2 10.000000
8 3 100.000000
9 1 20.000000
我认为非常好的替代填充方法(来自现已删除的答案)涉及groupby
+ transform
-
df.Value = df.Value.fillna(df.groupby('Group')['Value'].transform('mean'))
df
Group Value
0 1 10.000000
1 1 23.333333
2 3 5.000000
3 2 10.000000
4 2 10.000000
5 3 52.500000
6 1 40.000000
7 2 10.000000
8 3 100.000000
9 1 20.000000