【发布时间】:2018-11-01 02:44:54
【问题描述】:
我有一个数据集,我需要 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作为索引的一部分,不会有任何计数数据。
我可以在 datframe 中添加另一列,用 1 填充它,然后在 groupby 上使用 sum() 而不是 count()。但想知道是否有更清洁的方法来做到这一点。
【问题讨论】:
-
从this检查我对这个问题的回答
-
如果您将品牌和车身风格都添加为石斑鱼,那么就没有什么可计算的了。 Count 是一种特殊方法,用于计算列中的非空值。你想要的大概是
.size() -
这对我来说似乎是一个很好的问题。它有一个可重复的例子,op的尝试,对问题的明确定义,但它被否决了。有什么我错过的吗?
标签: python pandas pandas-groupby