[英]Filter out rows with common field where at least one fulfills a condition
我有这样的数据:
任务 | ID | 地位 |
---|---|---|
任务1 | 123 | 打开 |
任务二 | 123 | 关闭 |
任务三 | 211 | 关闭 |
任务4 | 211 | 关闭 |
任务5 | 564 | 关闭 |
任务6 | 994 | 打开 |
我想删除具有“打开”状态的相同 ID 的行。 换句话说,我想删除所有具有“打开”状态的 ID。
最终结果将是这样的:
任务 | ID | 地位 |
---|---|---|
任务三 | 211 | 关闭 |
任务4 | 211 | 关闭 |
任务5 | 564 | 关闭 |
数据:
{'Task': ['Task1', 'Task2', 'Task3', 'Task4', 'Task5', 'Task6'],
'ID': [123, 123, 211, 211, 564, 994],
'Status': ['Open', 'Closed', 'Closed', 'Closed', 'Closed', 'Open']}
我们可以使用打开状态和groupby
+ cummax
创建一个 boolean 过滤器。
这个想法是,如果一个状态是打开的,我们将它出现的所有行的相应 ID 标记为 True,然后我们过滤掉所有这些行:
out = df[~df['Status'].eq('Open').groupby(df['ID']).cummax()]
Output:
Task ID Status
2 Task3 211 Closed
3 Task4 211 Closed
4 Task5 564 Closed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.