python-3.x - 在条件下删除重复
问题描述
我有一个包含如下日期信息的数据框,我想删除 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
解决方案
另一种使用方式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
推荐阅读
- uml - 在用例图中应该将什么建模为子用例?
- javascript - Javascript 代码仅在空缓存和硬重新加载时有效
- c++ - 在全局范围内扩展宏时插入无序映射
- spring-boot - spring boot 关于敏感配置文件,自动化打包管理
- reactjs - 在 react app 中使用 axios 向服务器发送文件
- reactjs - 有没有办法告诉 lerna/npm '真正在我自己的 node_modules 中查找那些对等依赖项'?
- c# - 使用 JSON 文本阅读器反序列化时出现 JSON 错误消息
- javascript - 为什么我的随机密码生成器生成的字符多于我需要的字符数?
- r - 使用 face_wrap,如何在 ggplot2 中创建具有颜色和形状的图例
- cors - 在 Smalltalk 中使用茶壶启用 CORS