web-dev-qa-db-fra.com

Comment obtenir le nombre de groupes dans un objet groupby dans les pandas?

Ce serait utile, donc je sais sur combien de groupes uniques je dois effectuer des calculs. Merci.

Supposons que l'objet groupby soit appelé dfgroup.

34
wolfsatthedoor

Comme documenté , vous pouvez obtenir le nombre de groupes avec len(dfgroup).

45
BrenBarn

Depuis la version 0.23, il existe plusieurs options à utiliser. Tout d'abord, la configuration,

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'])

1) ngroups

Les versions plus récentes de l'API groupby fournissent cet attribut (non documenté) qui stocke le nombre de groupes dans un objet GroupBy.

g.ngroups
# 6

Notez que ceci est différent de GroupBy.groups qui renvoie en fait les groupes eux-mêmes:

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')}  

2) len

Comme indiqué dans réponse de BrenBarn , vous pouvez soit appeler len directement sur l'objet GroupBy, soit sur GroupBy.groups attribut (illustré ci-dessus).

len(g)
# 6

len(g.groups)    
# 6

Cela a été documenté dans GroupBy attributs d'objet .

3) Expression du générateur

Pour être complet, vous pouvez également itérer sur l'objet groupby, en comptant explicitement chaque groupe:

sum(1 for _ in g)
# 6

Mais que se passe-t-il si je veux réellement la taille de chaque groupe?

Tu es chanceux. Nous avons une fonction pour cela, GroupBy.size.

g.size()

A
a    2
b    2
c    3
d    1
dtype: int64

Notez que size compte également les NaN. Si vous ne voulez pas que les NaN soient comptés, utilisez GroupBy.count au lieu.

23
cs95