首页 > 解决方案 > 根据不同列中的多个条件删除行/ 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

标签: pythonpandasmultiple-conditionsdrop

解决方案


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

推荐阅读