簡體   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