Как найти повторяющиеся имена с помощью pandas?
У меня есть pandas.DataFrame
с столбцом с именем name
, содержащим строки.
Я хотел бы получить список имен, которые встречаются более одного раза в столбце. Как это сделать?
Я пробовал:
funcs_groups = funcs.groupby(funcs.name)
funcs_groups[(funcs_groups.count().name>1)]
Но он не отфильтровывает имена singleton.
Ответы
Ответ 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()
можно найти здесь.