首页 > 解决方案 > 在条件下删除重复

问题描述

我有一个包含如下日期信息的数据框,我想删除 code + currentdate 中的重复项,条件如下: 1) 如果 ['code','currentdate'] 中有重复项,请保留小于或当前日期;2)如果['code','currentdate']中没有重复,则保留原来的日期。谢谢!

>  code        currentdate       startdate            category 
>    a           2018-04-01      2015-04-28         category_z       
>    a           2018-04-01      2015-08-28         category_x     
>    a           2018-04-01      2018-04-17         category_y  
>    a           2018-05-01      2015-04-28         category_z   
>    a           2018-05-01      2015-08-28         category_x   
>    a           2018-05-01      2018-04-17         category_y      
>    b           2018-04-01      2018-08-28         category_x   
>    b           2018-05-01      2018-08-28         category_x  
>    c           2018-04-01      2018-03-17         category_x     
>    c           2018-04-01      2018-04-28         category_y        
>    c           2018-05-01      2018-03-17         category_x     
>    c           2018-05-01      2018-04-28         category_y   

预期的输出将是:

>  code        currentdate       startdate            category      
>    a           2018-04-01      2015-08-28         category_x   
>    a           2018-05-01      2018-04-17         category_y      
>    b           2018-04-01      2018-08-28         category_x   
>    b           2018-05-01      2018-08-28         category_x  
>    c           2018-04-01      2018-03-17         category_x     
>    c           2018-05-01      2018-04-28         category_y

标签: python-3.xpandas

解决方案


另一种使用方式tail

df.sort_values(['startdate']).groupby(['code','currentdate']).tail(1)

更新

df['Key']=df.currentdate>=df.startdate
df.sort_values(['startdate']).groupby(['code','currentdate']).apply(lambda x : x if len(x)<=1 else x.loc[x['Key']].tail(1))
Out[380]: 
                    code currentdate   startdate    category    Key
code currentdate                                                   
a    2018-04-01  1     a  2018-04-01  2015-08-28  category_x   True
     2018-05-01  5     a  2018-05-01  2018-04-17  category_y   True
b    2018-04-01  6     b  2018-04-01  2018-08-28  category_x  False
     2018-05-01  7     b  2018-05-01  2018-08-28  category_x  False
c    2018-04-01  8     c  2018-04-01  2018-03-17  category_x   True
     2018-05-01  11    c  2018-05-01  2018-04-28  category_y   True

推荐阅读