Python 3.x 根据日期条件删除重复项

Python 3.x 根据日期条件删除重复项,python-3.x,pandas,Python 3.x,Pandas,我有一个如下所示的数据帧,我想根据某些标准删除重复。 1) 如果startdate大于月,则会将其删除。 2) 如果开始日期少于一个月,则保留最新记录 > COMP Month Startdate bundle result > 0 TD3M 2018-03-01 2015-08-28 01_Essential keep > 1 TD3M 2018-03-01 2018-

我有一个如下所示的数据帧,我想根据某些标准删除重复。 1) 如果startdate大于月,则会将其删除。 2) 如果开始日期少于一个月,则保留最新记录

>       COMP    Month       Startdate   bundle            result
> 0     TD3M    2018-03-01  2015-08-28  01_Essential      keep    
> 1     TD3M    2018-03-01  2018-07-17  04_Complete       remove
> 2     TD3M    2018-04-01  2015-08-28  01_Essential      keep
> 3     TD3M    2018-04-01  2018-07-17  04_Complete       remove
> 4     TD3M    2018-05-01  2015-08-28  01_Essential      keep
> 5     TD3M    2018-05-01  2018-07-17  04_Complete       remove
> 6     TD3M    2018-06-01  2015-08-28  01_Essential      keep
> 7     TD3M    2018-06-01  2018-07-17  04_Complete       remove
> 8     TD3M    2018-08-01  2015-08-28  01_Essential      remove
> 9     TD3M    2018-08-01  2018-07-17  04_Complete       keep
> 10    TD3M    2018-09-01  2015-08-28  01_Essential      remove
> 11    TD3M    2018-09-01  2018-07-17  04_Complete       keep
预期产出将是:

>       COMP    Month       Startdate   bundle            
> 0     TD3M    2018-03-01  2015-08-28  01_Essential      
> 2     TD3M    2018-04-01  2015-08-28  01_Essential     
> 4     TD3M    2018-05-01  2015-08-28  01_Essential     
> 6     TD3M    2018-06-01  2015-08-28  01_Essential     
> 9     TD3M    2018-08-01  2018-07-17  04_Complete  
> 11    TD3M    2018-09-01  2018-07-17  04_Complete          

首先,我删除您的“结果”列:

df=df.drop(columns='result')

首先检查月和开始日期字段是否为日期时间格式:

df.Month=pd.to_datetime(df.Month)
df.Startdate=pd.to_datetime(df.Startdate)

然后筛选和分组(按最大值聚合):


df=df[df.Startdate这里有一种使用
sort\u值的方法

df.query('Startdate<=Month').sort_values('Startdate').drop_duplicates('Month',keep='last')
Out[892]: 
    COMP      Month  Startdate        bundle result
0   TD3M 2018-03-01 2015-08-28  01_Essential   keep
2   TD3M 2018-04-01 2015-08-28  01_Essential   keep
4   TD3M 2018-05-01 2015-08-28  01_Essential   keep
6   TD3M 2018-06-01 2015-08-28  01_Essential   keep
9   TD3M 2018-08-01 2018-07-17   04_Complete   keep
11  TD3M 2018-09-01 2018-07-17   04_Complete   keep

df.query(
df=df[df['Month']>df['SartDate']]的起始日期可能重复)
您的问题和输出不匹配,请检查