这是我的数据框:
df = pd.DataFrame({'a':list('xxxyyzz'), 'b':[10,20,30,5,3,1,2]})
我将它们分组:
groups = df.groupby('a')
我要打印至少20个以上的b
的组。在这种情况下,我要打印x
。
这是我想要的结果:
x
a b
0 x 10
1 x 20
2 x 30
答案 0 :(得分:4)
按Series.gt
比较值,按a
-Series
之类的df['a']
列进行分组,并使用GroupBy.transform
和GroupBy.any
来测试至少一个每组True
:
df1 = df[df['b'].gt(20).groupby(df['a']).transform('any')]
print (df1)
a b
0 x 10
1 x 20
2 x 30
答案 1 :(得分:4)
您可以使用GroupBy
检查哪些值在20
,any
列a
和transform
之上,以仅选择至少一行满足以下条件的那些组条件:
df[df.b.gt(20).groupby(df.a).transform('any')]
a b
0 x 10
1 x 20
2 x 30
答案 2 :(得分:4)
无需groupby
,只需isin
df[df.a.isin(df.loc[df.b>20,'a'])]
Out[996]:
a b
0 x 10
1 x 20
2 x 30