Pandas,如何统计分组数据框中的出现并创建新列?

时间:2017-11-13 19:17:12

标签: python pandas dataframe

如何使用pandas获取组内每个值的计数?

在下表中,我有Group和Value列,我想生成一个名为count的新列,该列应该包含该组中该值的总出现次数。

我的 df 数据框如下(没有计数列)

------------------------- 
| Group| Value | Count? |
------------------------- 
|   A  |    10 |      3 |
|   A  |    20 |      2 |
|   A  |    10 |      3 |
|   A  |    10 |      3 |
|   A  |    20 |      2 |
|   A  |    30 |      1 |
-------------------------  
|   B  |    20 |      3 |
|   B  |    20 |      3 |
|   B  |    20 |      3 |
|   B  |    10 |      1 |
------------------------- 
|   C  |    20 |      2 |
|   C  |    20 |      2 |
|   C  |    10 |      2 |
|   C  |    10 |      2 |
------------------------- 

我可以使用这个获得计数:

df.groupby(['group','value']).value.count()

但这只是为了查看,我正在艰难地将结果作为新列返回到数据框。

2 个答案:

答案 0 :(得分:2)

使用transform

df['count?']=df.groupby(['group','value']).value.transform('count').values

答案 1 :(得分:1)

尝试merge

df

   Group  Value
0      A     10
1      A     20
2      A     10
3      A     10
4      A     20
5      A     30
6      B     20
7      B     20
8      B     20
9      B     10
10     C     20
11     C     20
12     C     10
13     C     10


g = df.groupby(['Group', 'Value']).Group.count()\
                      .to_frame('Count?').reset_index()

df = df.merge(g)
df

   Group  Value  Count?
0      A     10       3
1      A     10       3
2      A     10       3
3      A     20       2
4      A     20       2
5      A     30       1
6      B     20       3
7      B     20       3
8      B     20       3
9      B     10       1
10     C     20       2
11     C     20       2
12     C     10       2
13     C     10       2