Дублировать строки в pandas DF

У меня есть DF в Pandas, который выглядит так:

Letters Numbers
A       1
A       3
A       2
A       1
B       1
B       2
B       3
C       2
C       2

Я хочу подсчитать количество похожих строк и сохранить результат в третьем столбце. Например, вывод, который я ищу:

Letters Numbers Events
A       1       2
A       2       1
A       3       1
B       1       1
B       2       1
B       3       1
C       2       2

Пример того, что я хочу сделать, - здесь. Лучшая идея, которую я придумал, - использовать count_values(), но я думаю, что это всего лишь один столбец. Другая идея - использовать duplicated(), так или иначе я не хочу конструировать какой-либо for -loop. Я уверен, что существует альтернатива Pythonic для цикла for.

Ответ 1

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

In [16]: df.groupby(['Letters', 'Numbers']).size()
Out[16]: 
Letters  Numbers
A        1          2
         2          1
         3          1
B        1          1
         2          1
         3          1
C        2          2
dtype: int64

Чтобы получить DataFrame, как в вашем примере, вы можете reset индекс с reset_index.

Ответ 2

Вы можете использовать комбинацию groupby, transform, а затем drop_duplicates

In [84]:

df['Events'] = df.groupby('Letters')['Numbers'].transform(pd.Series.value_counts)
df.drop_duplicates()
Out[84]:
  Letters  Numbers  Events
0       A        1       2
1       A        3       1
2       A        2       1
4       B        1       1
5       B        2       1
6       B        3       1
7       C        2       2