Python如何使用bfill方法填充自定义值(例如“#NA ####”)?

问题描述 投票:-1回答:1

我有一个包含“#NA ####”的数据框。我想用组均值来回填这个值。

我知道我可以先用np.NAN替换“#NA ####”,然后使用pd.fillna,但还有更方便的方法吗?

python pandas missing-data
1个回答
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  
© www.soinside.com 2019 - 2024. All rights reserved.