我认为这是一个相当基本的问题,但我似乎无法找到解决方案。
我有一个类似于以下内容的pandas数据框:
import pandas as pd
df = pd.DataFrame({'A' : ['x','x','y','z','z'],
'B' : ['p','p','q','r','r']})
df
创建一个这样的表:
A B
0 x p
1 x p
2 y q
3 z r
4 z r
我正在尝试创建一个表,表示该数据帧中不同值的数量。所以我的目标是这样的:
A B c
0 x p 2
1 y q 1
2 z r 2
但是,我无法找到正确的功能来实现这一目标。我试过了:
df.groupby(['A','B']).agg('count')
这将生成一个包含3行(如预期)但没有“count”列的表。我不知道如何添加count计数列。有人能指出我正确的方向吗?
答案 0 :(得分:11)
您可以使用size
df.groupby(['A','B']).size()
Out[590]:
A B
x p 2
y q 1
z r 2
dtype: int64
为您的解决方案添加其中一列
df.groupby(['A','B']).B.agg('count')
Out[591]:
A B
x p 2
y q 1
z r 2
Name: B, dtype: int64
更新:
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
答案 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
df.value_counts(['A', 'B']).reset_index(name='c')
A B c
0 z r 2
1 x p 2
2 y q 1