熊猫重复数据删除并返回重复的索引列表

时间:2018-11-20 21:16:53

标签: python pandas dataframe

我有一个具有50万行的pandas数据框。这样构造,其中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 4、93和275相关联的document_id都是“让我们在星期二11:45拍摄”,那么如何使用{{ 1}}位于一列中,而相关联的重复document的列表位于另一列中?

document_id

我知道我可以使用for循环,将每个文档与数据框中的每个其他文档进行比较,并保存所有匹配项,但是我试图避免多次迭代超过500k行。取而代之的是最pythonic的方式是什么?

1 个答案:

答案 0 :(得分:0)

  

我想比较两者以获得重复的document_id列表。

您应该可以使用带有.duplicated(keep=False)的“初始” DataFrame来执行此操作。这是一个示例:

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]