如果另一列有重复值,则删除组 - 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
具有相同的长度,所以我们在这里转换聚合。
我有以下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
具有相同的长度,所以我们在这里转换聚合。