计算每个组中重复项的数量

时间:2019-01-15 19:37:21

标签: python pandas dataframe group-by duplicates

假设我有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_01Order中有多少次重复。在此示例中,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 :(得分:2)

您需要使用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