根据条件删除一些重复行

Drop some of duplicate rows based on condition

我有一个这样的数据框。

ID,group,event
A,0,0
A,1,0
B,0,1
B,1,1
C,0,1
C,1,0
D,0,0
D,1,1
E,0,0
F,0,1

我想删除一些基于 'ID' 和条件的重复行: 如果 group=0 且 event=1,则删除 group=1 中的重复行 否则不要删除重复项

所以想要的数据框是这样的

ID,group,event
A,0,0
A,1,0
B,0,1
C,0,1
D,0,0
D,1,1
E,0,0
F,0,1

如果 ID 也存在 group=0event=1:

,则需要从预期输出中删除 group=1
#test first condition
m0 = df['group'].eq(1)
#get groups if at least one `group=0` and `event=1`
m1 = df['ID'].isin(df.loc[df['group'].eq(0) & df['event'].eq(1), 'ID'])

#filter out this rows
df = df[~m0 | ~m1]
#alternative solution
#df = df[~(m0 & m1)]
print (df)
  ID  group  event
0  A      0      0
1  A      1      0
2  B      0      1
4  C      0      1
6  D      0      0
7  D      1      1
8  E      0      0
9  F      0      1