我有一个具有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的方式是什么?
答案 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]