21

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

我试过了:

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

但它不会过滤掉单例名称。

4

6 回答 6

39

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

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
于 2013-03-06T13:10:39.193 回答
11

一个班轮可以是:

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

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

于 2013-12-01T13:48:49.013 回答
8

value_counts也会给你重复的数量。

names = df.name.value_counts()
names[names > 1]
于 2016-09-18T23:19:48.407 回答
3

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

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

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

duplicated()可以在这里找到pandas 的参考资料。

于 2019-04-04T17:49:57.690 回答
2

另一种衬里可以是:

(df.name).drop_duplicates()
于 2016-06-14T04:35:13.960 回答
1

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

我想这也有效:

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

并且df2.index会给你一个重复的名字列表

于 2013-11-25T17:45:09.377 回答