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]