Python 具有两个分类变量的dataframe上的Groupby和count()
我有一个数据集,需要通过groupby()找到每个唯一组合的计数Python 具有两个分类变量的dataframe上的Groupby和count(),python,pandas,pandas-groupby,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
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()
。但是想知道是否有更干净的方法来实现这一点。只有在至少有一列未用于分组的情况下,才可以使用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
请检查我的答案,如果你把品牌和体型都添加为石斑鱼,那就没什么可计算的了。Count是一种特殊的方法,用于计算列中的非空值。你想要的可能是
.size()
这对我来说似乎是个很好的问题。它有一个可复制的例子,op的尝试,明确的问题定义,但它被否决了。有什么我遗漏了吗?你能澄清一下为什么你的解决方案有效而问题中的代码无效吗?@SashaTsukanov,当然,补充了一个简短的描述。。。