2017-08-03 62 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月只有一次公園訪問,所以我將排除索引0和2處的條目。此外,由於貓在2月份訪問了公園,所以我也會當貓在三月份訪問公園3次時,排除索引5處的條目。但由於貓在三月份曾三次參加過這個公園,我將包括四月份的參賽作品。

結果,結局,樣本數據幀我想最終是要看起來像這樣:

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

有什麼辦法沒有環有效做到這一點?我最好的猜測是創建一個新的數據框,其中park_visits = 1,然後嘗試刪除下一個日期和動物相同的實例。但是,我不知道如何只刪除下一個實例,而不是所有實例(所以我需要保留日期爲四月的條目,動物是貓,並且park_visits是2)。任何幫助,將不勝感激。

回答

2

我們想要確定那些行,其中park_visits大於本月和上個月。我們用shift查看前一個月

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