如果另一列有重复值,则删除组 - pandas 数据框

Drop group if another column has duplicate values - pandas dataframe

我有以下df

id  value many other variables
A    5
A    5
A    8  
A    9
B    3
B    4 
B    5
B    9 
C    10
C    11
C    19 
D    6
D    6
D    10
E    0
E    0
E    0
... 

如果 value 列中有重复值(零除外),我想删除整个 id 组所以输出应该是

id  value many other variables
B    3
B    4 
B    5
B    9 
C    10
C    11
C    19 
E    0
E    0
E    0
... 

您可以使用 duplicated 来标记重复项,然后转换 groupby.any 来标记具有重复项的组。然后要获取带有 0 的行,请将此布尔掩码与标记为 0 的布尔掩码链接起来:

out =df[~df.duplicated(['id','value']).groupby(df['id']).transform('any') | df['value'].eq(0)]

输出:

   id  value many_other_variables
4   B      3                     
5   B      4                     
6   B      5                     
7   B      9                     
8   C     10                     
9   C     11                     
10  C     19                     
14  E      0                     
15  E      0                     
16  E      0                     

注意:groupby.any 是一个聚合,transform 转换该聚合以匹配原始 DataFrame 的长度。目标是创建一个布尔掩码来过滤 df ;和布尔掩码必须与原始df具有相同的长度,所以我们在这里转换聚合。