如何获取pandas中groupby对象中的组数?

wol*_*oor 39 python group-by dataframe pandas pandas-groupby

这将是有用的,所以我知道有多少我必须执行计算的唯一组.谢谢.

假设调用groupby对象dfgroup.

Bre*_*arn 48

记录所示,您可以获得组的数量len(dfgroup).

  • 如下所述,使用 len(dfgroup) 可能会非常慢,特别是对于大量组。`dfgroup.ngroups` 是获取此值的最快方法,因为这是一个存储值! (14认同)

cs9*_*s95 30

建立

df = pd.DataFrame({'A': list('aabbcccd'), 'B': 'x'})
df

   A  B
0  a  x
1  a  x
2  b  x
3  b  x
4  c  x
5  c  x
6  c  x
7  d  x

g = df.groupby(['A'])
Run Code Online (Sandbox Code Playgroud)

从v0.23开始,有多种可能的选项可供使用.

ngroups

较新版本的groupby API提供了此(未记录的)属性,该属性存储GroupBy对象中的组数.

g.ngroups
# 6
Run Code Online (Sandbox Code Playgroud)

GroupBy.groups

您可以拨打lenlen对象直接,或在GroupBy属性.该代表委托GroupBy.groups检索组的数量.

g.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')}  
Run Code Online (Sandbox Code Playgroud)

len(g)
# 6

len(g.groups)    
# 6
Run Code Online (Sandbox Code Playgroud)

生成器表达

为了完整性,您还可以迭代组.

sum(1 for _ in g)
# 6
Run Code Online (Sandbox Code Playgroud)

如果你想真正打印这些组,你可以做类似的事情

g.size()

A
a    2
b    2
c    3
d    1
dtype: int64
Run Code Online (Sandbox Code Playgroud)

附录
如果您要查找每个组的大小,可以使用GroupBy:

df = pd.DataFrame({'A': list('aabbcccd'), 'B': 'x'})
df

   A  B
0  a  x
1  a  x
2  b  x
3  b  x
4  c  x
5  c  x
6  c  x
7  d  x

g = df.groupby(['A'])
Run Code Online (Sandbox Code Playgroud)

请注意,也GroupBy.size计算NaN.如果您不想计算NaN,请size改用.

最后,还有一个选项,GroupBy.count通过ngroups它可以得到完全相同的结果,GroupBy.groups但是在一列而不是两列上进行分组.

  • 注意如果有很多组,`len(g)`在第一次调用时可能会非常慢!IPython之后会缓存结果,但是g.ngroups总是很快,因为它被存储为属性。 (3认同)