假设我有以下形式的数据:

d = {'col1': ['State A','State A','State A', 'State B','State B'], 'col2': ['Town A', 'Town A', 'Town B', 'Town A','Town B']}
df = pd.DataFrame(data=d)

我想用一个groupby来计算a州和B州发生了多少次a镇和B镇的事件
State A  Town A  2
         Town B  1
State B  Town A  1
         Town B  1

这是什么语法?通常的groupby返回空数据帧,因为没有其他列。
df.groupby(['col1','col2']).count()

最佳答案

您可以添加['col2']来修复代码

df.groupby(['col1','col2'])['col2'].count()
Out[150]:
col1     col2
State A  Town A    2
         Town B    1
State B  Town A    1
         Town B    1
Name: col2, dtype: int64

如果你需要分类
df1=df.groupby(['col1','col2'])['col2'].count().to_frame('value')

df1['helpcol']=df1.index.get_level_values(0)

df1.sort_values(['helpcol','value'],ascending=[True,True])
Out[164]:
                value  helpcol
col1    col2
State A Town B      1  State A
        Town A      2  State A
State B Town A      1  State B
        Town B      1  State B

10-08 02:39