データフレームに約500,000のエントリがあります。エントリの量を大幅に減らすために、このデータに何らかの平滑化を適用したいと思います。スライスをデータフレームに適用する方法は?
これはサンプルデータフレームdf
です:
EVENT GRADE SERVICE_TIME QUEUE_TIME HOLD_TIME
AAA 3 170 20 12
AAA 4 165 15 10
AAA 3 172 24 12
AAA 3 105 5 10
BBB 5 40 10 10
BBB 5 60 10 8
目的はSERVICE_TIME
、QUEUE_TIME
とHOLD_TIME
の粒度を低下させることです。
これを行うために、私はEVENT
とGRADE
によってグループエントリにしたい、と60秒(すなわち、[0; 60]のスライスウィンドウのSERVICE_TIME
の平均値を推定するために、[61; 120]、[121; 180 ]、[181; 240]、最大値がSERVICE_TIME
まで)。スライシングウィンドウのサイズを60から他の値に柔軟に変更することが重要です。 したがって、スライスはSERVICE_TIME
に適用する必要がありますが、その他の列QUEUE_TIME
とQUEUE_TIME
はそれに応じて平均化する必要があります。
サンプルの結果:どちらもスライシングウィンドウに属しているため
EVENT GRADE SERVICE_TIME QUEUE_TIME HOLD_TIME
AAA 3 171 22 12
AAA 3 105 5 10
AAA 4 165 15 10
BBB 5 50 10 9
したがって、SERVICE_TIME
、170と172の二つの値は、マージされた[121、180]。したがって、私は平均を計算した171
と私はちょうどQUEUE_TIME
とHOLD_TIME
の対応値を平均します。
どうすればこのスライスを行うことができますか?
平均を計算するだけで(スライスしない場合)、私はこのようにします。あなたは基本的にだけでなく['EVENT','GRADE']
によってグループ分けのことを除いて、正しい考えを持っている
result = df.groupby(['EVENT','GRADE']).agg({'SERVICE_TIME': 'mean',
'QUEUE_TIME': 'mean',
'HOLD_TIME': 'mean'}).reset_index()