使用 pandas 的 groupby 后删除一个分组

23

在pandas中,是否可以通过组名删除groupby对象中的一个组?也就是说,在执行groupby之后,根据其名称删除结果组。

4个回答

20

对于DataFrame分组的筛选已经进行了讨论。未来的pandas版本中可能会包含一种更方便的方法

但是目前,以下是我认为最简洁的通过名称筛选GroupBy对象grouped并返回剩余组的DataFrame的方法。

df.drop(grouped.get_group(group_name).index)

这里有一个更通用的方法,源于上面提到的链接:

df[grouped[0].transform(lambda x: x.name != group_name).astype('bool')]

太棒了。谢谢。这比我希望的更明显一些——不太痛苦。 - geomando
4
这是否需要我们“重新创建”群组,因为我们只是改变了数据框?是否有任何新的进展可以让我们更轻松地完成这个任务? - user2051561

2

似乎没有直接删除groupby对象中的组的方法。我认为你可以在进行groupby之前对这些groupby进行筛选。

df = df[df[group] != group_name]

也许我误解了变量“group”的含义,但是您不能通过GroupBy对象对DataFrame进行索引。 - Dan Allan
我认为应该是 df = df[df[group_name] != group_label]。但是发帖者使用了 group_name 和 group_label。 - waitingkuo
你如何创建group_name? - Dan Allan

2

非常简单,您需要使用filter函数和lambda表达式:

df_filtered = df.groupby('name').filter(lambda x: (x.name == 'cond1' or...(其他条件)))

请注意,如果您想使用多个条件,请将它们放在括号()中。你会得到一个DataFrame而不是GroupObject。


0

应该很简单:

df.drop(index='group_name',inplace=True)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接