具有两个分类变量的数据帧上的 Groupby 和 count() [重复]
Posted
技术标签:
【中文标题】具有两个分类变量的数据帧上的 Groupby 和 count() [重复]【英文标题】:Groupby and count() on dataframe having two categorical variables [duplicate] 【发布时间】: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的尝试,对问题的明确定义,但它被否决了。有什么我错过的吗?
【参考方案1】:
只有当您至少有一列未用于分组时,您才能使用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
【讨论】:
您能否解释一下为什么您的解决方案有效而问题中的代码无效? @SashaTsukanov,当然,添加了一个简短的描述......以上是关于具有两个分类变量的数据帧上的 Groupby 和 count() [重复]的主要内容,如果未能解决你的问题,请参考以下文章
机器学习:如何在具有分类和数字特征的 pandas 数据帧上应用一种热编码?
Groupby 在一列 pandas 数据帧上,并使用 GridsearchCv 使用通用 sklearn 管道训练每个组的特征和目标 (X, y)