Дедупликация панд и возврат списка индексов, которые были дубликатами - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть датафрейм pandas с 500k строками.Структурировано следующим образом, где столбец document представляет собой строки:

   document_id                                           document
0            0                               Here is our forecast
1            1  Traveling to have a business meeting takes the...
2            2                      test successful. way to go!!!
3            3  Randy, Can you send me a schedule of the salar...
4            4                  Let's shoot for Tuesday at 11:45.

Когда я делаю дуплекс с кадром данных на основе содержимого столбца документа, используя df.drop_duplicates(subset='document'), я получаю половину числадокументы.

Теперь, когда у меня есть исходный кадр данных и второй кадр данных с уникальным набором значений document, я бы хотел сравнить их, чтобы получить список document_id, которые являются дубликатами.

Например, если все связанные document для document_id 4, 93 и 275 - «Давайте снимать во вторник в 11:45», то как мне получить кадр данных с documentв одном столбце, а список связанных дубликатов document_id в другом столбце?

     document_ids                                           document    
        ...
4    [4, 93, 275]                  Let's shoot for Tuesday at 11:45.

Я знаю, что мог бы использовать цикл for, сравнивать каждый документ с каждым другим документом в кадре данных и сохранять все совпадения, но я стараюсь избегать многократного повторения более 500 000 строк.Что же является самым питоническим способом решения этой проблемы?

1 Ответ

0 голосов
/ 21 ноября 2018

Я хотел бы сравнить два, чтобы получить список идентификаторов document_id, которые являются дубликатами.

Вы должны быть в состоянии сделать это, используя ваш «начальный» DataFrame с .duplicated(keep=False).Вот пример:

In [1]: import pandas as pd                                                                                                                                   

In [2]: df = pd.DataFrame({ 
   ...:     'document_id': range(10), 
   ...:     'document': list('abcabcdedb') # msg 'e' is not duplicated
   ...: })

In [3]: dupes = df.document.duplicated(keep=False)                                                                                                            
In [4]: df.loc[dupes].groupby('document')['document_id'].apply(list).reset_index()                                                                           
Out[4]: 
  document document_id
0        a      [0, 3]
1        b   [1, 4, 9]
2        c      [2, 5]
3        d      [6, 8]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...