У меня есть список товаров, у которых, вероятно, есть проблемы с экспортом. Я хотел бы получить список повторяющихся элементов, чтобы я мог их вручную сравнить. Когда я пытаюсь использовать дублированный метод pandas , он возвращает только первый дубликат. Есть ли способ получить все дубликаты, а не только первый?
Небольшая часть моего набора данных выглядит так:
ID,ENROLLMENT_DATE,TRAINER_MANAGING,TRAINER_OPERATOR,FIRST_VISIT_DATE
1536D,12-Feb-12,"06DA1B3-Lebanon NH",,15-Feb-12
F15D,18-May-12,"06405B2-Lebanon NH",,25-Jul-12
8096,8-Aug-12,"0643D38-Hanover NH","0643D38-Hanover NH",25-Jun-12
A036,1-Apr-12,"06CB8CF-Hanover NH","06CB8CF-Hanover NH",9-Aug-12
8944,19-Feb-12,"06D26AD-Hanover NH",,4-Feb-12
1004E,8-Jun-12,"06388B2-Lebanon NH",,24-Dec-11
11795,3-Jul-12,"0649597-White River VT","0649597-White River VT",30-Mar-12
30D7,11-Nov-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",30-Nov-11
3AE2,21-Feb-12,"06405B2-Lebanon NH",,26-Oct-12
B0FE,17-Feb-12,"06D1B9D-Hartland VT",,16-Feb-12
127A1,11-Dec-11,"064456E-Hanover NH","064456E-Hanover NH",11-Nov-12
161FF,20-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",3-Jul-12
A036,30-Nov-11,"063B208-Randolph VT","063B208-Randolph VT",
475B,25-Sep-12,"06D26AD-Hanover NH",,5-Nov-12
151A3,7-Mar-12,"06388B2-Lebanon NH",,16-Nov-12
CA62,3-Jan-12,,,
D31B,18-Dec-11,"06405B2-Lebanon NH",,9-Jan-12
20F5,8-Jul-12,"0669C50-Randolph VT",,3-Feb-12
8096,19-Dec-11,"0649597-White River VT","0649597-White River VT",9-Apr-12
14E48,1-Aug-12,"06D3206-Hanover NH",,
177F8,20-Aug-12,"063B208-Randolph VT","063B208-Randolph VT",5-May-12
553E,11-Oct-12,"06D95A3-Hanover NH","06D95A3-Hanover NH",8-Mar-12
12D5F,18-Jul-12,"0649597-White River VT","0649597-White River VT",2-Nov-12
C6DC,13-Apr-12,"06388B2-Lebanon NH",,
11795,27-Feb-12,"0643D38-Hanover NH","0643D38-Hanover NH",19-Jun-12
17B43,11-Aug-12,,,22-Oct-12
A036,11-Aug-12,"06D3206-Hanover NH",,19-Jun-12
В настоящее время мой код выглядит так:
df_bigdata_duplicates = df_bigdata[df_bigdata.duplicated(cols='ID')]
Там есть пара повторяющихся предметов. Но когда я использую приведенный выше код, я получаю только первый элемент. В справочнике по API я вижу, как я могу получить последний элемент, но я хотел бы иметь их все, чтобы я мог визуально проверить их, чтобы понять, почему я получаю несоответствие. Итак, в этом примере я хотел бы получить все три записи A036 и обе записи 11795, а также любые другие повторяющиеся записи, а не только первую. Любая помощь приветствуется.
источник
ID
, а не« строки, идентичные в нескольких или во всех столбцах ».Ответы:
Метод №1: распечатать все строки, в которых ID является одним из дублированных:
но я не мог придумать хороший способ предотвратить повторение
ids
так много раз. Я предпочитаю способ №2:groupby
по ID.источник
g for _
делать?g for (placeholder, g) in df.groupby('bla') if 'bla'
; подчеркивание - типичный символ для обозначения неизбежного аргумента, когда мы не хотим использовать его для чего-либо в лямбда-подобном выражении.sort
был объявлен устаревшим для DataFrames в пользу любогоsort_values
илиsort_index
связанных SO Q&AВ Pandas версии 0.17 вы можете установить keep = False в дублированной функции, чтобы получить все повторяющиеся элементы.
источник
'all'
было бы более логичным и интуитивно понятным ИМО.он вернет вам все повторяющиеся строки.
Согласно документации :
источник
Поскольку я не могу комментировать, поэтому публикую как отдельный ответ
Чтобы найти дубликаты на основе более чем одного столбца, укажите имя каждого столбца, как показано ниже, и он вернет вам весь набор повторяющихся строк:
источник
Это сработало для меня
источник
== True
,.duplicated()
массив уже возвращает bool.Используя поэлементную логику или и установив для аргумента take_last дублированного метода pandas значение True и False, вы можете получить набор из вашего фрейма данных, который включает все дубликаты.
источник
Это может быть не решением вопроса, а лишь иллюстрацией примеров:
Выходы:
источник
sort("ID")
похоже, сейчас не работает, кажется устаревшим в соответствии с документом сортировки , поэтому используйтеsort_values("ID")
вместо этого для сортировки после повторяющегося фильтра, как показано ниже:источник
Для моей базы данных дублирование (keep = False) не работало, пока столбец не был отсортирован.
источник
df[df.duplicated(['ID'])==True].sort_values('ID')
источник