2016-10-09 3 views
1

私は、次のパンダのデータフレームがあると表示される前に:を選択し、最後のnレコードデータフレームからのイベントが

 name   timestamp   
1 event1  9/2016 13:47:49   
1 event2  9/2016 13:47:55   
1 event3  9/2016 13:49:30   
1 event4  9/2016 13:50:49   
1 trigger  9/2016 13:51:49   
1 event6  9/2016 13:54:49   
1 event7  9/2016 13:55:49   
1 event8  9/2016 13:56:49   
1 event9  9/2016 13:57:49   
1 trigger  9/2016 13:58:49   
1 event10  9/2016 13:59:49   
1 event11  9/2016 13:59:59   
1 event12  9/2016 14:00:49   
1 event13  9/2016 14:00:59   
1 event14  9/2016 14:01:49  

私がやろうとしています何は次のとおりです。 表示されるトリガ列があるたびに、私は希望します最後の3つのレコードを選択します。だから私はこれが欲しい終わり:

 name   timestamp 
1 event2  9/2016 13:47:55   
1 event3  9/2016 13:49:30   
1 event4  9/2016 13:50:49 
1 event7  9/2016 13:55:49   
1 event8  9/2016 13:56:49   
1 event9  9/2016 13:57:49 

素敵な定義済みのパンダはそれを行うように機能するか、私はデータフレームを反復処理し、それらを手動で取得する必要がありますありますか?

ありがとうございました!

答えて

3

あなたはname列がtrigger条件と等しいかどうかのcumsumに基づいてグループ変数を作成し、各グループの最後の3つのレコードを取ることができます(最後のグループが原因なしがあるという事実に除外する必要がありますそれ以降のtrigger):

g = (df.name == 'trigger').cumsum() 

df[g < g.max()].groupby(g[g < g.max()]).tail(3) 

#  name  timestamp 
#1 event2 9/2016 13:47:55 
#1 event3 9/2016 13:49:30 
#1 event4 9/2016 13:50:49 
#1 event7 9/2016 13:55:49 
#1 event8 9/2016 13:56:49 
#1 event9 9/2016 13:57:49 
関連する問題