如何使用pandas查找重复的名称?

时间:2013-03-06 12:40:38

标签: python group-by pandas

我有一个pandas.DataFrame,其中包含一个名为name的列,其中包含字符串。 我想获得列中不止一次出现的名称列表。我该怎么做?

我试过了:

funcs_groups = funcs.groupby(funcs.name)
funcs_groups[(funcs_groups.count().name>1)]

但它没有过滤出单身人士的名字。

6 个答案:

答案 0 :(得分:38)

如果你想找到名称重复的行(我们第一次看到的话除外),你可以尝试这个

In [16]: import pandas as pd
In [17]: p1 = {'name': 'willy', 'age': 10}
In [18]: p2 = {'name': 'willy', 'age': 11}
In [19]: p3 = {'name': 'zoe', 'age': 10}
In [20]: df = pd.DataFrame([p1, p2, p3])

In [21]: df
Out[21]: 
   age   name
0   10  willy
1   11  willy
2   10    zoe

In [22]: df.duplicated('name')
Out[22]: 
0    False
1     True
2    False

答案 1 :(得分:11)

一个班轮可以是:

x.set_index('name').index.get_duplicates()

索引包含查找重复项的方法,列似乎没有类似的方法..

答案 2 :(得分:6)

value_counts也会为您提供重复数量。

names = df.name.value_counts()
names[names > 1]

答案 3 :(得分:2)

另一个班轮可以是:

(df.name).drop_duplicates()

答案 4 :(得分:1)

我遇到了类似的问题并且遇到了这个问题。

我想这也有效:

counts = df.groupby('name').size()
df2 = pd.DataFrame(counts, columns = ['size'])
df2 = df2[df2.size>1]

df2.index将为您提供包含重复项的名称列表

答案 5 :(得分:1)

给出的大多数回复都演示了如何删除重复项,而不是找到重复项。

以下内容将选择数据框中的每条行,该行具有重复的'name'字段。请注意,这将找到每个实例,而不仅仅是在第一次出现后重复。 keep参数接受可以排除第一次出现或最后一次出现的其他值。

df[df.duplicated(['name'], keep=False)]

here中有duplicated()的熊猫参考。