我有一个熊猫数据帧:
df=pd.DataFrame({'A':[1,1,2,2,3,3],'B':['c','t','k','c','c','k']})
Run Code Online (Sandbox Code Playgroud)
我需要按 A 对 df 进行分组并删除 B ='t' 的 A 组。什么是熊猫groupby语法来做到这一点?在我的示例答案中,A 组 2 和 3。
Agroupby/filter可以在这里工作(仅过滤满足特定条件的返回组)。因此,例如,您可以执行以下操作:
>>> df.groupby('A').filter(lambda x: (x['B'] != 't').all())
A B
2 2 k
3 2 c
4 3 c
5 3 k
Run Code Online (Sandbox Code Playgroud)
(x['B'] != 't').all() 如果 B 列中没有带有“t”的行,则允许我们仅保留一个组
或者您可以按以下方式编写过滤器:根据 B 列的一行是否为“t”创建一个 booleen 系列。如果对 booleen 系列求和,如果任何元素为“t”,则总和将大于零:
>>> df.groupby('A').filter(lambda x: (x['B'] == 't').sum() == 0)
A B
2 2 k
3 2 c
4 3 c
5 3 k
Run Code Online (Sandbox Code Playgroud)
还有其他编写过滤条件的方法,但它们都具有相同的风格。