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