Подтвердить что ты не робот

Как найти повторяющиеся имена с помощью pandas?

У меня есть pandas.DataFrame с столбцом с именем name, содержащим строки. Я хотел бы получить список имен, которые встречаются более одного раза в столбце. Как это сделать?

Я пробовал:

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

Но он не отфильтровывает имена singleton.

4b9b3361

Ответ 1

Если вы хотите найти строки с дублированным именем (кроме первого раза, когда мы это видим), вы можете попробовать это

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

Ответ 2

Один вкладыш может быть:

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

индекс содержит метод поиска дубликатов, столбцы, похоже, не имеют аналогичного метода.

Ответ 3

value_counts также даст вам количество дубликатов.

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

Ответ 4

Еще один лайнер может быть:

(df.name).drop_duplicates()

Ответ 5

У меня была аналогичная проблема и наткнулся на этот ответ.

Я думаю, это также работает:

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

и df2.index предоставит вам список имен с дубликатами

Ответ 6

Большинство ответов показывают, как удалить дубликаты, а не найти их.

Следующее выберет каждую строку во фрейме данных с повторяющимся полем 'name'.

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

Ссылку на панд для duplicated() можно найти здесь.