根据日期和其他布尔条件删除行

时间:2020-10-22 17:15:07

标签: python 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列删除重复的行,例如在School 2和3之间以及在5和6之间如何存在重复项,基于哪个具有最近的日期,以及School的状态是否有效。因此,对于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')

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

'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