关于python:具有两个分类变量的数据帧上的Groupby和count()

Groupby and count() on dataframe having two categorical variables

本问题已经有最佳答案,请猛点这里访问。

我有一个数据集,需要GroupBy()并找到每个唯一组合的计数。

1
2
3
4
5
6
    body-style        make
0  convertible  alfa-romeo
1  convertible  alfa-romeo
2    hatchback  alfa-romeo
3        sedan        audi
4        sedan        audi

我需要生成如下所示的输出:

1
2
3
4
             make   body-style   count
0     alfa-romero  convertible       2
1     alfa-romero    hatchback       1
2            audi    sedan           2

已尝试以下代码:

1
2
3
body = pd.DataFrame({'make':['alfa-romeo','alfa-romeo','alfa-romeo','audi','audi'], 'body-style':['convertible','convertible','hatchback','sedan','sedan']})

body.groupby(by=['make','body-style'], as_index=False).count()

此聚合引发"列表索引超出范围"错误。但是,当我从groupby子句中删除任意一列时,它可以为我提供按剩余列分组的计数。

如果删除时为"index=false",则没有错误,但结果对象将同时具有列样式和正文样式作为索引的一部分,并且不会有任何计数数据。

我可以在数据框中添加另一列,用1s填充它,在groupby上取一个sum(),而不是count()。但想知道是否有一个更清洁的方法来做到这一点。


只有在至少有一列尚未用于分组时,才能使用GroupBy.count()

如果按df中的所有列分组,则使用.size()代替:

1
2
3
4
5
6
In [119]: body.groupby(['make','body-style']).size().reset_index(name='count')
Out[119]:
         make   body-style  count
0  alfa-romeo  convertible      2
1  alfa-romeo    hatchback      1
2        audi        sedan      2