首页 > 解决方案 > 根据同一数据框中的其他行从数据框中删除行

问题描述

我有一个看起来像这样的数据框:

     date    | test_hour
------------+-----------
 2000-01-01 |         1
 2000-01-01 |         2
 2000-01-01 |         3
 2000-01-02 |         1
 2000-01-02 |         2
 2000-01-02 |         3
 2000-01-02 |         4
 2000-01-03 |         1
 2000-01-03 |         2

我需要删除所有缺少 test_hours= 1、2 和 3 的日期。因此,生成的数据框不应包含带有2000-01-03的行,因为它缺少test_hour= 3:

     date    | test_hour
------------+-----------
 2000-01-01 |         1
 2000-01-01 |         2
 2000-01-01 |         3
 2000-01-02 |         1
 2000-01-02 |         2
 2000-01-02 |         3
 2000-01-02 |         4

我目前正在使用 for 循环来确定要删除的日期,但这似乎违背了使用数据框的目的。有什么更有效的方法来做到这一点?

标签: pandasdataframe

解决方案


这是filterisinand一起使用的一种方法all

df.groupby('date').filter(lambda x : pd.Series([1,2,3]).isin(x['test_hour']).all())
         date  test_hour
0  2000-01-01          1
1  2000-01-01          2
2  2000-01-01          3
3  2000-01-02          1
4  2000-01-02          2
5  2000-01-02          3
6  2000-01-02          4

推荐阅读