2017-06-28 5 views
0

以下は、私が作業しているデータフレームを除いて、私のデータフレームと似たサンプルデータフレームです。安定した速度条件のためのパンダデータフレームのフィルタリング

import pandas as pd 
import numpy as np 

df=pd.DataFrame([ 
     [10.07,5], [10.24,5], [12.85,5], [11.85,5], 
     [11.10,5], [14.56,5], [14.43,5], [14.85,5], 
     [14.95,5], [10.41,5], [15.20,5], [15.47,5], 
     [15.40,5], [15.31,5], [15.43,5], [15.65,5] 
    ], columns=['speed','delta_t']) 
df 

    speed delta_t 
0 10.07  5 
1 10.24  5 
2 12.85  5 
3 11.85  5 
4 11.10  5 
5 14.56  5 
6 14.43  5 
7 14.85  5 
8 14.95  5 
9 10.41  5 
10 15.20  5 
11 15.47  5 
12 15.40  5 
13 15.31  5 
14 15.43  5 
15 15.65  5 

std_dev = df.iloc[0:3,0].std() # this will give 1.55 
print(std_dev) 

私は2列、 'スピード' と 'delta_Tの' を持っています。 Delta_Tは、実際のデータ(それには日付と時刻がある)の後続の行の時​​間の差です。動作速度は変わらず、達成しようとしているのは、速度がほぼ一定であるすべてのデータ点をフィルタリングすることです。たとえば、標準偏差が<、Delta_T> = 15分のフィルタリングです。たとえば、最初の速度で開始する場合、コードは次の速度にジャンプし続け、標準偏差を計算し続けます。0.5未満でdelta_Tが30分以上の場合、それをコピーする必要がありますデータを新しいデータフレームに変換します。 このデータフレームでは、インデックス5〜8および10〜15が残っています。

これは可能ですか?どうやったらいいか教えてください。申し訳ありませんが私は立ち往生しています。それは私には複雑に思えます。

ありがとうございます。

よろしくアルン

+0

は、ご希望のデータセットを投稿することができますか? – MaxU

+0

ありがとうございます。それはこのように見えます。 df1 = pd.DataFrame([14.56,5]、[14.43,5]、[14.85,5]、[14.95,5]、[15.2,5]、[15.47,5]、[15.4,5]、[ 15.31,5]、[15.43,5]、[15.65,5]]、columns = ['speed'、 'delta_t'])。私は、元のデータから別のデータフレームを作成して、自分の望みを得ることができました。理想的には、コードは、標準と時間基準に基づいてnewoneを作成する必要があります –

答えて

0

レッツ使用rollingshiftstd

3のウィンドウの圧延STDを計算し、0.5よりもこれらの感染症以下見つけて取得するためにシフト(-2)を使用しstdが0.5未満であったウィンドウの最初の値。ブールインデックスを|(または)と使用すると、定常状態の範囲全体を取得できます。

df_std = df['speed'].rolling(3).std() 
df_ss = df[(df_std < 0.5) | (df_std < 0.5).shift(-2)] 
df_ss 

出力:

speed delta_t 
5 14.56  5 
6 14.43  5 
7 14.85  5 
8 14.95  5 
10 15.20  5 
11 15.47  5 
12 15.40  5 
13 15.31  5 
14 15.43  5 
15 15.65  5 
+0

こんにちは。あなたの返事をありがとう。これは私があなたに与えたデータのために働いています。しかし、私が20分以上の時間基準のためにそれを行う必要があれば、それは正しくないでしょうか?私はローリング4を行い、シフトを変更しようとしましたが、うまくいきませんでした。私はデルタTの基準を変更できるようにしたいと思います。 –

+0

私はなぜそうは見ません。異なるデータセットでテストできます。 4ローリングとシフト-3は同じに動作するはずです。 –

関連する問題