2016-04-13 3 views
2

ここで私のデータを整理するのに問題があります。データフレームは、以下のようになります。以前のタイムスタンプは、その後、省略(初期化のために、それは「10」を取るよ)取られない場合、私はするつもり何PythonでPandas経由で前のスライドウィンドウにタイムスタンプがある行を削除してください

timestamp 
0 10 
1 12 
2 23 
3 25 
4 27 
5 34 
6 45 

がダウンし、1をつかむために、トップからのタイムスタンプを反復処理でありますタイムスタンプが[10、10 + 10]、「12」を含むすべての行同様に、[23、23 + 10]の間にあるので、 '23'を取って '25'、 '27'を省略する必要があります。最後に、「34」と「45」も同様に取られるべきです。

結局、結果は

timestamp 
0 10 
2 23 
5 34 
6 45 

は誰もが私にパンダでこれを実現するためのいくつかのアイデアを与えることができるだろうか?まことにありがとうございます!これがあなたを助けている場合

答えて

2

私はしないでくださいgroupbyのような構造を使ってこのカスタム問題を解決する方法があると信じていますが、ここではインデックスの場所とタイムスタンプの値を与えるコーディングソリューションです。

stamps = [df.timestamp.iat[0]] 
index = [df.index[0]] 
for idx, ts in df.timestamp.iteritems(): 
    if ts >= stamps[-1] + 10: 
     index.append(idx) 
     stamps.append(ts) 

>>> index 
[0, 2, 5, 6] 

>>> stamps 
[10, 23, 34, 45] 

>>> df.iloc[index] 
    timestamp 
0   10 
2   23 
5   34 
6   45 
0

は、私は、初期化についての正しい理解かどうかわからないけど、次を参照してください。

df = pd.read_csv("data.csv") 
gap = 10 
actual = 0 
for timestamp in df.values: 
    if timestamp >= (actual+gap): 
     print(timestamp) 
     actual = timestamp 

新しいDFを作成する場合:

df = pd.read_csv("data.csv") 
gap = 10 
actual = 0 
index = [] 
for i, timestamp in enumerate(df.values): 
    if timestamp >= (actual+gap): 
     actual = timestamp 
    else: 
     index.append(i) 

new_df = df.drop(df.index[index]) 
+0

これはいいアイデアですが、iterrowsを使って反復し、(実際にOPの意図であれば)反復処理の途中で行を削除してください。 – IanS

関連する問題