在熊猫中如何得到一个分组对象中的分组数?

这将是有用的,所以我知道有多少独特的组,我必须执行计算。谢谢。

假设 groupby 对象称为 dfgroup

61812 次浏览

作为 记录在案,可以用 len(dfgroup)得到组的数目。

[ 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

正如在 布伦巴恩的回答中指出的,您可以使用 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。但是请注意,size也计算 NaN。如果不希望计算 NaNs,可以使用 GroupBy.count