我有一个包含“#NA ####”的数据框。我想用组均值来回填这个值。
我知道我可以先用np.NAN替换“#NA ####”,然后使用pd.fillna,但还有更方便的方法吗?
建立
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