当前位置: 首页 > 知识库问答 >
问题:

具有两个分类变量[duplicate]的数据帧上的Groupby和count()

司空凌
2023-03-14

我有一个数据集,需要通过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中添加另一列,用1s填充它,然后在groupby上取一个sum(),而不是count()。但我想知道是否有一个更干净的方法来做到这一点。

共有1个答案

曾枫
2023-03-14

只有在至少有一列未用于分组时,才能使用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
 类似资料:
  • 我有一堆数据帧,我连接成一个大数据帧。所有行都有一个datetime、一个名称,然后是一些具有随机值的列,例如,数据帧可以如下所示: 现在,我需要按对这些行进行分组,并将它们分成60分钟的bins,我目前的做法如下: 这可以用任何方式来完成吗?或者我必须将我的数据帧一分为二,然后在之后加入?

  • 我有一个关于几千个城市学校数据的数据框。学校是行标识符,城市编码如下: 知道我有几千个城市,如何将城市变量转换为数字?我想一个热编码是不合适的,因为我会有太多的列。将千级分类变量转换为数字变量的一般方法是什么? 谢谢你。

  • 我来自SQL环境,正在学习Python Pandas中的一些内容。我有一个关于分组和聚合的问题。 假设我按年龄类别对数据集进行分组,并计算不同的类别。在MSSQL中,我会这样写: 结果集是一个带有两列的“普通”表,第二列我命名为Count。 当我想在Pandas中进行等效时,groupby对象的格式不同。所以现在我必须重置索引,并在下面一行中重命名列。我的代码如下所示: 我的问题是,这是否可以一次

  • 我正在用php和ajax创建一个消息传递站点。 获取对话有问题。 问题是,每当两个用户在他们之间聊天时,就会有两个id不同的行; A和B正在聊天,彼此只写了4条消息 消息数据库是这样的 我的目标是用这个代码获取记录 $页面所有者是登录的用户; 使用这种方法,我可以进行两次相同的对话 a 代码在页面上给了我两次对话,我只想得到一个结果; 我的整个php代码是这样的

  • 我有两个接近1000大小的整数向量,我要做的是检查这两个向量的平方整数和是否相同。所以我编写以下代码:

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且