一个数据帧(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行)?
一种方法是使用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
这里有一种方法:假设数据框是'd',列名为'a'和'b'。首先,获取每个唯一值在'a'中出现的次数:
e = d['a'].value_counts()
然后获取大于1的值列表,并返回第一列是该列表成员的行:
d[d['a'].isin(e[e>1].index)]
keep='last'
而不是take_last=True
。 - Clebor
符号可以确保您不会删除每个重复项的第一个或最后一个出现,对吗?因此,在最新版本的pandas中,最好只使用df[df.duplicated('c1', keep=False)]
来实现此功能。从文档中可以看到:False:将所有重复项标记为True
。 - jov14