在pandas中为groupby的结果添加'count'列?

Oli*_*ver 11 python pandas

我认为这是一个相当基本的问题,但我似乎无法找到解决方案.

我有一个类似于以下的pandas数据帧:

import pandas as pd

df = pd.DataFrame({'A' : ['x','x','y','z','z'],
                   'B' : ['p','p','q','r','r']})
df
Run Code Online (Sandbox Code Playgroud)

这会创建一个这样的表:

    A   B
0   x   p
1   x   p
2   y   q
3   z   r
4   z   r
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个表,表示该数据帧中不同值的数量.所以我的目标是这样的:

    A   B   c
0   x   p   2
1   y   q   1
2   z   r   2
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到正确的功能来实现这一目标.我试过了:

df.groupby(['A','B']).agg('count')
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含3行(如预期)但没有"count"列的表.我不知道如何添加count计数列.有人能指出我正确的方向吗?

WeN*_*Ben 20

你可以用 size

df.groupby(['A','B']).size()
Out[590]: 
A  B
x  p    2
y  q    1
z  r    2
dtype: int64
Run Code Online (Sandbox Code Playgroud)

为您的解决方案添加其中一列

df.groupby(['A','B']).B.agg('count')
Out[591]: 
A  B
x  p    2
y  q    1
z  r    2
Name: B, dtype: int64
Run Code Online (Sandbox Code Playgroud)

更新:

df.groupby(['A','B']).B.agg('count').to_frame('c').reset_index()

#df.groupby(['A','B']).size().to_frame('c').reset_index()
Out[593]: 
   A  B  c
0  x  p  2
1  y  q  1
2  z  r  2
Run Code Online (Sandbox Code Playgroud)

  • 这是一个简单的解决方法,只需添加一个新的计数列,但显然是“Pythonic”的做事方式。 (2认同)

cs9*_*s95 6

熊猫 >= 1.1: DataFrame.value_counts

这是df.groupby(['A', 'B']).size().

df.value_counts(['A', 'B'])

A  B
z  r    2
x  p    2
y  q    1
dtype: int64
Run Code Online (Sandbox Code Playgroud)
df.value_counts(['A', 'B']).reset_index(name='c')

   A  B  c
0  z  r  2
1  x  p  2
2  y  q  1
Run Code Online (Sandbox Code Playgroud)