Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按较低级别的值筛选多级数据帧_Python_Pandas - Fatal编程技术网

Python 按较低级别的值筛选多级数据帧

Python 按较低级别的值筛选多级数据帧,python,pandas,Python,Pandas,我有一个具有三个级别的数据框架,让我们称它们为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

我有一个具有三个级别的数据框架,让我们称它们为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类中,第5组中
Fail==True
的最小值为3

如何做到这一点?

你需要,一次在课堂上,一次在小组中,获得
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

如果在多个类中有相同的组名,则应该考虑在类和组上使用第二个<代码> GROPBB/<代码>

df[df['Value'].where(df['Fail']).groupby(df['Class']).transform('min')
     .eq(df['Value'].where(df['Fail']).groupby([df['Class'], df['Group']]).transform('min'))]

我们通过两个步骤完成,找到
min
,用
min

df1 =df[df.Fail].copy()
s=df1.groupby('Class').Value.min()
df=df[df.Group.isin(df1.loc[df1.Value.isin(s),'Group'])]
   Class  Group  Value   Fail
0      A      1      0  False
1      A      1      1   True
2      A      2      0  False
3      A      2      1   True
4      A      2      2   True
12     B      5      1  False
13     B      5      2  False
14     B      5      3   True

你能解释一下这个输出是如何符合要求的吗?这并不是我所需要的,虽然输出是正确的,但我需要记住
Fail
列,并得到
Fail==True
的最小值,谢谢,但我需要记住
Fail
列,就像是在编辑问题中一样。@MichaelO。过滤它:-)