我试图根据数据帧是否重复来删除数据帧的行,并始终保留更新的行。使用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
中有更有效的方法吗?
答案 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]