2017-12-20 1 views
-1

"#NA ####"を含むデータフレームがあります。グループを意味する。Python bfillメソッドを使用してカスタマイズした値(「#NA ####」など)を入力する方法

を私が最初にnp.NANと "#NA ####" を置き換えることができ、その後、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でグループ、およびmeanfillnaを呼び出す -

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 

私はかなり良いと思いました(現在は削除された答えから)代替fillメソッド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 
関連する問題