Python 如何使用bfill 方法填充自定义值(如"#NA####')?
Python How to fill a customized value (such as "#NA####') with bfill method?
我有一个包含“#NA####”的数据框。我想用组均值回填这个值。
我知道我可以先把“#NA####”换成np.NAN,然后用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
分组,然后用 mean
-
调用 fillna
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
我有一个包含“#NA####”的数据框。我想用组均值回填这个值。
我知道我可以先把“#NA####”换成np.NAN,然后用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
分组,然后用 mean
-
fillna
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