繁体   English   中英

筛选出具有公共字段且至少有一个满足条件的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM