具有两个分类变量的数据帧上的 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,则不会出现错误,但生成的对象将包含两列 - makebody-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 数据帧上应用一种热编码?

Groupby 在一列 pandas 数据帧上,并使用 GridsearchCv 使用通用 sklearn 管道训练每个组的特征和目标 (X, y)

具有大量列的数据帧上的 Spark 窗口函数

数据帧上的 spark GROUPED_MAP udf 是不是并行运行?

spark - 在大型数据帧上执行 groupby 和聚合时,java 堆内存不足