如何获取 pandas 中 groupby 对象中的组数?
How to get number of groups in a groupby object in pandas?
这很有用,因为我知道我必须对多少个唯一组执行计算。谢谢。
假设 groupby 对象被调用 dfgroup
。
如documented,可以得到组数len(dfgroup)
。
[pandas >= 0.23] 简单、快速、Pandaic: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
不同,returns 实际组本身。
为什么我更喜欢这个而不是 len
?
正如 中所述,您可以使用 len(dfg)
来获取组数。 但你不应该。查看 GroupBy.__len__
的 实现(这是 len()
内部调用的),我们看到 __len__
调用了 GroupBy.groups
,其中 returns 分组索引的字典:
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
object attributes 中。然而,len
的问题在于,对于具有很多组的 GroupBy 对象,这可能需要更长的时间
但是如果我真的想要每个组的大小怎么办?
你很幸运。我们有一个函数,叫做 GroupBy.size
。但请注意 size
也计算 NaN。如果您不想计算 NaN,请改用 GroupBy.count
。
这很有用,因为我知道我必须对多少个唯一组执行计算。谢谢。
假设 groupby 对象被调用 dfgroup
。
如documented,可以得到组数len(dfgroup)
。
[pandas >= 0.23] 简单、快速、Pandaic: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
不同,returns 实际组本身。
为什么我更喜欢这个而不是 len
?
正如 len(dfg)
来获取组数。 但你不应该。查看 GroupBy.__len__
的 实现(这是 len()
内部调用的),我们看到 __len__
调用了 GroupBy.groups
,其中 returns 分组索引的字典:
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
object attributes 中。然而,len
的问题在于,对于具有很多组的 GroupBy 对象,这可能需要更长的时间
但是如果我真的想要每个组的大小怎么办?
你很幸运。我们有一个函数,叫做 GroupBy.size
。但请注意 size
也计算 NaN。如果您不想计算 NaN,请改用 GroupBy.count
。