将一行中的日期与Pandas中后续行中的日期进行比较

时间:2014-05-14 22:45:00

标签: 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  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中有更有效的方法吗?

1 个答案:

答案 0 :(得分: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]