pd.duplicated () группы дубликатов - PullRequest
0 голосов
/ 13 декабря 2018

У меня большой массив данных со множеством столбцов и строк, который получается из многих файлов Excel.Я хотел бы найти файлы, которые приводят к дублированию, так как иногда файлы частично содержат наблюдения, которых не должно быть в файле Excel.Я знаю, что df [df.duplicated (subset = ['A', 'B'], keep = False)] дает мне все повторяющиеся строки.

import pandas as pd
df = pd.DataFrame({'A':[1,1,2,2,2,2,3,3],'B':['Q','Q','R','R','R','P','L','L'],'origin':['file1','file2','file3','file4','file5','file6','file7','file8']})

Я хочу, чтобы результат выглядел как

result = pd.DataFrame({'A':[1,1,2,2,2,3,3],'B':['Q','Q','R','R','R','L','L'],'origin':['file1','file2','file3','file4','file5','file7','file8'],'group':['g1','g1','g2','g2','g2','g3','g3'],'duplicate_count':[2,2,3,3,3,2,2]})

Однако я хотел бы всегда группировать два (или более) соответствующих дубликата, чтобы затем распечатать соответствующие файлы иколичество раз, когда дубликат встречается.Мне не удалось найти ответ.

1 Ответ

0 голосов
/ 13 декабря 2018

Используйте duplicated с keep='False' для фильтрации всех дубликатов по boolean indexing, затем sort_values, для чисел по группам используйте ngroup, для подсчета transform с size:

cols = ['A','B']
df1 = df[df.duplicated(subset=cols,keep=False)].copy()
df1 = df1.sort_values(cols)
df1['group'] = 'g' + (df1.groupby(cols).ngroup() + 1).astype(str)
df1['duplicate_count'] = df1.groupby(cols)['origin'].transform('size')
print (df1)
   A  B origin group  duplicate_count
0  1  Q  file1    g1                2
1  1  Q  file2    g1                2
2  2  R  file3    g2                3
3  2  R  file4    g2                3
4  2  R  file5    g2                3
6  3  L  file7    g3                2
7  3  L  file8    g3                2
...