-1
"#NA ####"を含むデータフレームがあります。グループを意味する。Python bfillメソッドを使用してカスタマイズした値(「#NA ####」など)を入力する方法
を私が最初にnp.NANと "#NA ####" を置き換えることができ、その後、pd.fillnaを使用していますが、任意のより便利な方法があります知っていますか?
"#NA ####"を含むデータフレームがあります。グループを意味する。Python bfillメソッドを使用してカスタマイズした値(「#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
でグループ、および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
私はかなり良いと思いました(現在は削除された答えから)代替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
いいえ、便利な方法ではありません。そのようにする必要があります。 –