2014-05-14 53 views
0

我試圖根據它們是否重複刪除數據幀的行,並始終保留最近的行。這將是簡單的使用df.drop_duplicates(),但我也需要申請timedelta。如果EndDate列比具有相同ID的另一行少182天,則該行將被視爲重複。在熊貓的後續行中比較日期在一行到日期

下表顯示了我需要放在Duplicate列中的行。

ID EndDate    Duplicate 
0 A 2008-07-31 00:00:00 True 
1 A 2008-09-31 00:00:00 False 
2 A 2009-07-31 00:00:00 False 
3 A 2010-03-31 00:00:00 False 
4 B 2008-07-31 00:00:00 False 
5 B 2009-05-31 00:00:00 True 
6 B 2009-07-31 00:00:00 False 

輸入數據不排序,但它似乎是正確的做法是通過IDEndDate進行排序,然後測試每一行對下一行。我想我可以通過遍歷行來做到這一點,但數據集相對較大,因此在pandas中有更高效的方法來做到這一點?

回答

0

我已經設法讓下面的代碼工作,但我相信它可以改進。

df = df.sort(['ID','EndDate']) 
df['Duplicate'] = (df['EndDate'].shift(-1) - df['EndDate']) - datetime.timedelta(182) < 0 
df['Duplicate'] = df['Duplicate'] & (df['ID'].shift(-1) == df['ID']) 
df = df[df['Duplicate'] == False]