1
私のコードは、時系列で異常値を検出します。私がしたいのは、最初のデータフレーム列の外れ値を外れ値ではない前の値に置き換えることです。 パンダのデータフレーム列の値を前の値に置き換えます
True
は、データフレームの値が外れ値False
は、データフレームの値が外れ値 されないことを意味することを意味する:
このコードは、単にブール配列を作成し、外れ値を検出します
series = read_csv('horario_completo.csv', header=None, squeeze=True) df=pd.DataFrame(series) from pandas import rolling_median consumos=df.iloc[:,0] df['rolling_median'] = rolling_median(consumos, window=48, center=True).fillna(method='bfill').fillna(method='ffill') threshold =50 difference = np.abs(consumos - df['rolling_median']) outlier = difference > threshold
これまで、すべてが機能します。
私が考えているのは、True
の値を同じ列の以前の値に置き換えるマスクを作成することです(これが可能であれば、ループを作るよりもはるかに高速です)。
私は少し例を挙げてそれを説明してみましょう:
これは私が持っているものです。
index consumo
0 54
1 67
2 98
index outlier
0 False
1 False
2 True
そして、これは私が何をしたいです:
index consumo
0 54
1 67
2 67
私はこのようなマスクを作成する必要があると思います。
df.mask(outlier, df.columns=[[0]][i-1],axis=1)
obvioslyこれは、それを書く方法ではありません
。私はそれができると思う方法についての説明です(私は[i-1]について話しています)。
私はシフト(の存在を知りませんでした)。本当に本当に便利です。あなたの答えははっきりしていて、本当にうまくいきます。どうもありがとうございました。 – Jvr
うれしいことに、うれしい1日! – jezrael