我有一个具有三个级别的数据框,我们称它们为Class-> Group-> Value:
Class Group Value Fail
A 1 0 False
A 1 1 True
A 2 0 False
A 2 1 True
A 2 2 True
A 3 2 True
A 3 5 True
B 4 2 False
B 4 7 True
B 4 8 True
B 4 12 True
B 4 15 True
B 5 1 False
B 5 2 False
B 5 3 True
B 6 7 False
B 6 8 False
我需要获取组中的最小值等于类中的最小值的组,其中Fail==True
:
Class Group Value Fail
A 1 0 False
A 1 1 True
A 2 0 False
A 2 1 True
A 2 2 True
B 5 1 False
B 5 2 False
B 5 3 True
因此,在A类中,最小值Fail==True
为1,在组1和2中。在B类中,最小值Fail==True
为3,在组5中。
这个怎么做?
您需要groupby.transform
一次在班上,一次在组上,获得min
价值。你想两者都相等eq
df[df['Value'].where(df['Fail']).groupby(df['Class']).transform('min')
.eq(df['Value'].where(df['Fail']).groupby(df['Group']).transform('min'))]
Class Group Value Fail
0 A 1 0 False
1 A 1 1 True
2 A 2 0 False
3 A 2 1 False
4 A 2 2 True
12 B 5 1 False
13 B 5 2 False
14 B 5 3 True
如果您在多个班级中使用相同的组名,则应考虑groupby
在班级和组上都使用第二个。
df[df['Value'].where(df['Fail']).groupby(df['Class']).transform('min')
.eq(df['Value'].where(df['Fail']).groupby([df['Class'], df['Group']]).transform('min'))]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句