df = pd.DataFrame({'VisitID':[1,1,1,1,2,2,2,3,3,4,4], 'Item':['A','B','C','D','A','D','B','B','C','D','C']})


我有一个像这样的数据集:

VisitID | Item |
1       | A    |
1       | B    |
1       | C    |
1       | D    |
2       | A    |
2       | D    |
2       | B    |
3       | B    |
3       | C    |
4       | D    |
4       | C    |


我希望返回VisitID行,只要该VisitID出现项目A或B。我该怎么办?预期结果:

VisitID | Item |
1       | A    |
1       | B    |
1       | C    |
1       | D    |
2       | A    |
2       | D    |
2       | B    |
3       | B    |
3       | C    |


在R中,我可以通过

library(dplyr)
df %>% group_by(VisitID) %>% filter(any(Item %in% c('A', 'B')))


如何在Python中执行此操作?
类似于df.groupby(['VisitID']).query(any(['A','B']))?

最佳答案

语法相似,只是使用groupby.filter

df.groupby('VisitID').filter(lambda g: g.Item.isin(['A','B']).any())

   VisitID Item
0        1    A
1        1    B
2        1    C
3        1    D
4        2    A
5        2    D
6        2    B
7        3    B
8        3    C

10-01 12:51