簡體   English   中英

根據日期和其他布爾條件刪除行

[英]Dropping rows based on date and other boolean condition

我在 Pandas 中有一個這樣格式的數據框。

(df)
School ID      Num          Status       Date
School 1       6000         Active       2020-07-18
School 2       9-999        InActive     2020-09-05
School 3       9-999        Active       2020-03-30
School 4       8000         Active       2020-12-14
School 5       8999         InActive     2020-10-21
School 6       8999         Active       2020-03-12
....

我想根據 num 列刪除重復的行,例如學校 2 和 3 以及學校 5 和 6 之間的重復行。基於哪個具有最近的日期以及學校的狀態是否處於活動狀態。 因此,在 9-999 的情況下,學校 2 的行將被刪除,因為它處於非活動狀態,而學校 3 的行處於活動狀態。

但是,如果輸入 8999,即使 School 5 具有最近的日期,其狀態仍為 Inactive,因此將被刪除並保留 School 6 的行。

所以上述條件的結果將是

(df)
School ID      Num          Status       Date
School 1       6000         Active       2020-07-18
School 3       9-999        Active       2020-03-30
School 4       8000         Active       2020-12-14
School 6       8999         Active       2020-03-12
....

我不確定是否需要條件語句,或者是否可以僅按狀態和日期排序以刪除重復項,例如

df.sort_values('Date').drop_duplicates('School ID',keep='last')

謝謝您的幫助。

由於'Active' < 'InActive'我們可以使用drop_duplicatessort_values

df.sort_values('Status').drop_duplicates('Num').sort_index()

輸出:

   School  ID    Num  Status        Date
0  School   1   6000  Active  2020-07-18
2  School   3  9-999  Active  2020-03-30
3  School   4   8000  Active  2020-12-14
5  School   6   8999  Active  2020-03-12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM