Python 按较低级别的值筛选多级数据帧
我有一个具有三个级别的数据框架,让我们称它们为Class->Group->Value: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 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。过滤它:-)