Подсчитать количество дубликатов в каждой группе - PullRequest
0 голосов
/ 15 января 2019

Предположим, у меня есть DF

DF1:
IDField | Frame | Order
--------|-------|------
   20   | 10_01 |   0
   20   | 10_01 |   0
   20   | 10_01 |   1
   20   | 10_02 |   2
   5    | 02_01 |   0
   5    | 02_01 |   1

Я хочу узнать, сколько раз IDField 20 в Frame 10_01 имеет дубликаты в Order.В этом примере Order дублируется один раз.Меня не касается ничего, что не является дубликатом.Мне бы хотелось, чтобы мой конечный результат выглядел так:

DF2:
IDField | Frame | Order | Duplicates
--------|-------|-------|-----------
   20   | 10_01 |   0   |     1

Я пробовал группировать и считать так:

df2 = df1.groupby(['IDField', 'Frame', 'Order']).size().reset_index(name='Duplicates')

Хотя это дает мне повторяющийся счет,это дает мне счет за все, а не только за дубликаты.Есть ли элегантный способ в одну строчку это?Или мне нужно создать dataframe и обработать его потом?

1 Ответ

0 голосов
/ 15 января 2019

Вам понадобится начальный этап фильтрации с duplicated, затем вы можете сгруппировать по столбцам и вычислить size:

c = ['IDField', 'Frame', 'Order']
df[df.duplicated(c)].groupby(c).size().reset_index(name='Duplicates')

   IDField  Frame  Order  Duplicates
0       20  10_01      0           1

c = ['IDField', 'Order']
df[df.duplicated(c)].groupby(c).size().reset_index(name='Duplicates')

   IDField  Order  Duplicates
0       20      0           1
...