删除非重复条目

8

一个数据帧(pandas)有两列。需要移除第一列中没有重复的条目的行。

示例数据:

1 A
1 B
2 A
3 D
2 C
4 E
4 E

期望输出:

1 A
1 B
2 A
2 C
4 E
4 E

换句话说,需要移除第一列中所有单独出现的值(意味着唯一)。在Python中实现这个最快的方式是什么(约50k行)?

2个回答

6

一种方法是使用duplicated()方法。

df.duplicated('c1') 默认标记除第一个以外的所有重复项,而take_last=True则返回其他重复项。

In [600]: df[df.duplicated('c1') | df.duplicated('c1', take_last=True)]
Out[600]:
   c1 c2
0   1  A
1   1  B
2   2  A
4   2  C
5   4  E
6   4  E

4
在更新版本的pandas中,人们需要使用keep='last'而不是take_last=True - Cleb
3
作为一个对pandas相对较新的用户,如果我理解正确的话,这个代码意思是选择由重复方法标记为true的所有列。使用or符号可以确保您不会删除每个重复项的第一个或最后一个出现,对吗?因此,在最新版本的pandas中,最好只使用df[df.duplicated('c1', keep=False)]来实现此功能。从文档中可以看到: False:将所有重复项标记为True - jov14

3

这里有一种方法:假设数据框是'd',列名为'a'和'b'。首先,获取每个唯一值在'a'中出现的次数:

e = d['a'].value_counts()

然后获取大于1的值列表,并返回第一列是该列表成员的行:

d[d['a'].isin(e[e>1].index)]

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