我有一个 pandas 数据框,如下所示:
df = pd.DataFrame({'alpha':['a','a','b','b'],'beta':[1,2,3,4]})
这个想法是仅返回列 beta
上满足特定条件的组,否则丢弃整个组
我想要的结果是:
但是,例如。
df.groupby('alpha').apply(lambda x: x.beta>1)
不起作用。
最佳答案
尝试不使用groupby
、isin
df.loc[~df.alpha.isin(df.loc[df.beta<=1,'alpha'])]
Out[316]:
alpha beta
2 b 3
3 b 4
如果确实想要 groupby ,您可以使用 transform
,因为这比传递 lambda
更有效
df[df.beta.gt(1).groupby(df.alpha).transform('all')]
Out[317]:
alpha beta
2 b 3
3 b 4
时间
%timeit df.groupby('alpha').filter(lambda x: (x.beta >1).all())
100 loops, best of 3: 2.53 ms per loop
%timeit df.loc[~df.alpha.isin(df.loc[df.beta<=1,'alpha'])]
1000 loops, best of 3: 874 µs per loop
%timeit df[df.beta.gt(1).groupby(df.alpha).transform('all')]
100 loops, best of 3: 2.04 ms per loop
关于python - Pandas groupby 索引 : discard entire group if condition is not met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152600/