gropuby 并删除 pandas DataFrame 中的指定组

dra*_*ega 0 python pandas

我有一个熊猫数据帧:

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。

Kar*_* D. 5

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)

还有其他编写过滤条件的方法,但它们都具有相同的风格。