73

这会很有用,所以我知道我必须对多少个独特的组进行计算。谢谢你。

假设 groupby 对象被调用dfgroup

4

2 回答 2

83

[pandas >= 0.23] 简单、快速和熊猫:ngroups

较新版本的 groupby API 提供了这个(未记录的)属性,该属性将组数存储在 GroupBy 对象中。

# setup
df = pd.DataFrame({'A': list('aabbcccd')})
dfg = df.groupby('A')

# call `.ngroups` on the GroupBy object
dfg.ngroups
# 4

请注意,这与GroupBy.groups返回实际组本身不同。

为什么我更喜欢这个len呢?

BrenBarn 的回答中所述,您可以使用len(dfg)来获取组数。但你不应该。查看(内部调用)的实现GroupBy.__len__,我们看到调用,它返回分组索引的字典:len()__len__GroupBy.groups

dfg.groups
{'a': Int64Index([0, 1], dtype='int64'),
 'b': Int64Index([2, 3], dtype='int64'),
 'c': Int64Index([4, 5, 6], dtype='int64'),
 'd': Int64Index([7], dtype='int64')}

根据您操作中的组数,生成字典只是为了找到它的长度是一个浪费的步骤ngroups另一方面是可以在恒定时间内访问的存储属性。

这已记录在GroupBy对象属性中。然而,问题len在于,对于具有很多组的 GroupBy 对象,这可能需要更长的时间

但是如果我真的想要每个组的大小怎么办?

你很幸运。我们有一个函数,它叫做GroupBy.size. 但请注意,sizeNaN 也算在内。如果您不想计算 NaN,请GroupBy.count改用。

于 2017-10-01T11:44:22.287 回答
67

文档所述,您可以使用len(dfgroup).

于 2015-01-05T21:12:03.193 回答