具有两个分类变量

时间:2018-05-22 10:51:27

标签: python pandas pandas-groupby

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

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

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

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

尝试以下代码:

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子句中删除任一列时,它能够为我提供按剩余列分组的计数。

如果我删除 as_index = False ,则没有错误,但结果对象将同时包含两列 - make body-style 作为索引的一部分,并且赢得了任何计数数据。

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

1 个答案:

答案 0 :(得分:6)

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

如果您按DF中的所有列进行分组 - 请改为使用.size()

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