python - 根据不同列中的多个条件删除行/ Python Pandas
问题描述
我的第一篇文章。我希望我能够正确地提出这个问题。在下面的 df 中有需要根据多个条件删除的行。
所有行,其中“ID”存在(可能是一次或多次)并且都显示“confTyp”==“new”&“trType==”order”&Version==1意味着这些是有效的条目。
现在,如果“ID”不是唯一的,并且具有相同“ID”的行之一显示“confTyp”!=new 或“trTyp”!=“order”。需要删除具有相同“ID”的所有行。这也意味着必须删除带有假设正确的“confTyp”、“trTyp2”和“Version”的初始“ID”。
删除任何是 != "new" 的内容仍然会留下原始条目,然后也必须将其删除。
我已经以许多不同的方式尝试了 df.drop() 方法,但我远不是一个好的解决方案。有谁知道什么方法合适?
谢谢你的帮助。
我有以下数据框:
ID | 配置类型 | 类型 | 版本 |
---|---|---|---|
100 | 新的 | 命令 | 1 |
101 | 新的 | 命令 | 1 |
102 | 新的 | 命令 | 1 |
103 | 新的 | 命令 | 1 |
104 | 新的 | 命令 | 1 |
105 | 新的 | 命令 | 1 |
106 | 新的 | 命令 | 1 |
107 | 代替 | 手动的 | 1 |
106 | 取消 | 取消 | 2 |
106 | 代替 | 手动的 | 1 |
105 | 代替 | 代替 | 2 |
104 | 取消 | 取消 | 2 |
108 | 新的 | 命令 | 1 |
目标是以下输出:
ID | 配置类型 | 类型 | 版本 |
---|---|---|---|
100 | 新的 | 命令 | 1 |
101 | 新的 | 命令 | 1 |
102 | 新的 | 命令 | 1 |
103 | 新的 | 命令 | 1 |
108 | 新的 | 命令 | 1 |
解决方案
IIUC,你可以试试:
df = df.set_index('ID')[df.groupby('ID').apply(lambda x: all([set(x['confTyp']) == {
'new'}, set(x['trType']) == {'order'}, set(x['Version']) == {1}]))]
输出:
confTyp trType Version
ID
100 new order 1
101 new order 1
102 new order 1
103 new order 1
108 new order 1
推荐阅读
- apache-kafka - 卡夫卡 | 如何使用replica.high.watermark.checkpoint.interval.ms
- linux - 如何在 Shell 脚本中多次检查条件?
- php - 在 Laravel 应用程序中放置全局 php 的位置
- html - 完美放置比屏幕更大的图像
- android - 安装应用程序时调用接收器
- postgresql - postgress 中的创建日期、上次修改日期字段
- javascript - 为什么最后一个字符不断重复打印?
- performance - 浏览器提示 - 预连接 - 会损害负载性能吗?
- swift - 如何在主线程中同步运行多个方法?
- android - 如何制作 Groupie recylerview 2x2 布局