2017-08-03 17 views
2

私はこのデータフレームdfを持っていると言います。それは、このような構造です:データフレーム(Python)で現在のインスタンスと次のインスタンスを削除するにはどうすればよいですか?

index  date animal park_visits 
0   Jan  cat  1 
1   Jan  dog  2 
2   Feb  cat  1 
3   Feb  dog  1 
4   Feb  pig  4 
5   March cat  3 
6   March dog  2 
7   March pig  3 
8   April cat  2 

は、どのように私は、その行だけでなく、来月の行を除外するために、現在の月に動物は、単一の公園を訪問月未満を持っている場合、このような、という新しいデータフレームを作成することができます?

たとえば、インデックス0では、1月に1回のパーク訪問があったので、インデックス0と2のエントリを除外します。さらに、2月に1回猫が公園を訪れたので、猫が3月に公園を3回訪れたときには、インデックス5のエントリを除外します。しかし、猫が3月に3回公園に通ったので、私は4月のエントリーを含めるでしょう。

その結果、私は最終的に望む結末、サンプルデータフレームは、このような何か見に行くされています

index date animal park_visits 
    0  Jan  dog   2 
    1  Feb  pig   4 
    2  March pig   3 
    3  April cat   2 

をループすることなく、効率的にこれを行う方法はありますか?私の推測では、park_visits = 1の新しいデータフレームを作成し、それを使って日付と動物が同じ次のインスタンスを削除しようとします。ただし、すべてのインスタンスではなく、次のインスタンスのみを削除する方法がわかりません(したがって、日付が4月、動物がcat、park_visitsが2のエントリを保持する必要があります)。どんな助けもありがとう。

答えて

2

park_visitsが今月と前月よりも大きいローを特定したいとします。前月にシフトを使用して確認します。

f = lambda x: (lambda y: y & y.shift().fillna(True))(x > 1) 

df[df.groupby('animal').park_visits.transform(f)] 

     date animal park_visits 
index       
1  Jan dog   2 
4  Feb pig   4 
7  March pig   3 
8  April cat   2 
関連する問題