pandas DF中的重复行

时间:2014-09-02 08:44:34

标签: pandas count duplicates row

我在Pandas中有一个DF,看起来像:

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

我想要计算相似行的数量并将结果保存在第三列中。例如,输出I' m寻找:

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

我期待的一个例子是here。我提出的最好的想法是使用count_values(),但我认为这仅适用于一列。另一个想法是使用duplicated(),无论如何我不想构建任何for - 循环。我很确定,存在for循环的Pythonic替代方案。

2 个答案:

答案 0 :(得分:18)

您可以对这两列进行分组,然后计算组的大小:

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_index重置索引。

答案 1 :(得分:6)

您可以结合groupbytransform然后使用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