Python 将一行中的日期与下一行中的日期进行比较

Python 将一行中的日期与下一行中的日期进行比较,python,pandas,timedelta,Python,Pandas,Timedelta,我试图根据数据帧的行是否重复来删除这些行,并始终保留较新的行。使用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

我试图根据数据帧的行是否重复来删除这些行,并始终保留较新的行。使用
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

输入数据未排序,但似乎正确的方法是按
ID
EndDate
排序,然后对照下一行测试每一行。我想我可以通过循环行来实现这一点,但是数据集相对较大,所以在
pandas
中是否有更有效的方法来实现这一点?

我已经设法使以下代码正常工作,但我确信它可以改进

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]
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]