删除所有与pandas datafram中出现次数少于N个索引匹配的值

2024-09-30 16:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,按item_id索引,每个条目的行数各不相同(也就是说,item_id X可能有10行,而item Y可能只有1行)。我要做的是从dataframe中删除与只有一行的item_id相对应的所有行(即,只使用一个观察值删除所有项)。因此,如果数据帧的示例如下所示:

item_id measure1    measure2 ...
1       someNumber  someNumber
1       someNumber  someNumber
1       someNumber  someNumber
2       someNumber  someNumber
3       someNumber  someNumber
3       someNumber  someNumber
4       someNumber  someNumber
5       someNumber  someNumber
5       someNumber  someNumber

新的数据帧应该如下所示:

^{pr2}$

也就是说,我想删除只有一个观察值的项目的所有数据(在本例中,项目iuids2和4)。在


Tags: 数据项目目的id示例dataframepandasitem
1条回答
网友
1楼 · 发布于 2024-09-30 16:24:04

您可以使用groupbyfilter

>>> df.groupby("item_id").filter(lambda x: len(x) > 1)
   item_id    measure1    measure2
0        1  someNumber  someNumber
1        1  someNumber  someNumber
2        1  someNumber  someNumber
4        3  someNumber  someNumber
5        3  someNumber  someNumber
7        5  someNumber  someNumber
8        5  someNumber  someNumber

事实上,这与the docs中的一个例子非常相似。在


请注意,在评论中进行了一些讨论之后,很明显,在某些情况下,这在0.12中似乎不起作用,但在当前主干中有效。我相信这是jreback在this commit中修复的,如果我读取的是过滤器结果类型的正确分支,那么就避免了困难。在

相关问题 更多 >