2017-03-13 21 views
0

私はPandasを使用していくつかのTimeseriesデータを処理しています。私は、次の形式でデータフレームを持っている:パンダのデータフレームの時系列データのローリング平均

   Date  Time Reading 
552726 2016/08/01 0: 0: 0 17.28 
552727 2016/08/01 0: 0: 5 17.28 
552728 2016/08/01 0: 0:10 17.21 
552729 2016/08/01 0: 0:15 17.16 
552730 2016/08/01 0: 0:20 17.11 
552731 2016/08/01 0: 0:25 17.08 
552732 2016/08/01 0: 0:30 17.18 
552733 2016/08/01 0: 0:35 17.18 
etc... 

それが10分のウィンドウをとり、平均値を計算し、私は時系列全体でこのウィンドウを移動するように、私は、読書欄を平均化したいです。それから私は、データフレームが新しい平均値で更新することにしたい、ともタイムスタンプ、それは次のようになります。

  Date  Time  Reading 
552726 2016/08/01 0: 0: 0 17.30 
552727 2016/08/01 0: 10:0 17.35 
552728 2016/08/01 0: 20:0 17.20 
etc... 

パンダでこれを行うための最善の方法は何ですか?ローリングウインドウの周波数を設定するローリング平均法を試しました。しかし、私は新しいタイムスタンプを付けてデータフレームを再構築しなければなりません。これを行うにはよりクリーンで簡単な方法があると思います。

ありがとう、私は物事をより明確にすることができますか教えてください。

+1

あなたはいつも5秒ごとに観測をしていますか? – FLab

+0

はい。サンプリングレートは1サンプル/ 5秒です – entropy4money

+0

次に、120の観測ローリングウィンドウを使用してみませんか? – FLab

答えて

1

あなたのデータが与えられたら、平均15秒間隔を計算したかったとします。 は、私は単純でした:メインの「トリック」はn_obsの観測の複数を選択している

#frame contains your data 
n_obs = 3 
result = frame.rolling(window = n_obs, min_periods = 1).mean().iloc[::n_obs,:] 

#   Date  Time Reading 
# 0 2016/08/01 0: 0: 0 17.280000 
# 3 2016/08/01 0: 0:15 17.216667 
# 6 2016/08/01 0: 0:30 17.123333 

を。

これはn_obs = 120を使用する場合に有効です。実際に必要な平均よりも多くの平均を計算することを意味します。

+0

喜んで助けました。 回答が有用であればupvotingも検討してください;) 1つの問題は、1桁または2桁の時間と分を持つ時間の表現です。これはdatetimeへの変換に問題があります... 私は、このような「面倒な」行を使って素晴らしいフォーマットで時間を取得しました(この例のリストとして、しかしあなたは簡単にpandas Seriesに変換できます)。それぞれのステップを理解するためにそれを試すことができます。 time = frame.Time.values.tolist() time = map(lambda x: ":"。join(x)、[map(lambda x: "{0:0 ( "、"、 ")、)) – FLab

+0

ありがとうございました。私はパンダには新しいです。それは私がやっていることですが、インデックス作成のためにilocメソッドを使用しています。 – entropy4money

関連する問題