web-dev-qa-db-ja.com

パンダのgroupbyオブジェクトでグループの数を取得する方法は?

これは役立つので、計算を実行する必要がある一意のグループの数がわかります。ありがとうございました。

Groupbyオブジェクトがdfgroupと呼ばれるとします。

34
wolfsatthedoor

documented のように、len(dfgroup)でグループの数を取得できます。

45
BrenBarn

V0.23の時点で、使用する複数のオプションがあります。まず、セットアップ、

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

Groupby APIの新しいバージョンは、GroupByオブジェクトにグループの数を格納するこの(文書化されていない)属性を提供します。

g.ngroups
# 6

これは、実際にグループ自体を返す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')}  

2)len

BrenBarn's answer に示すように、lenオブジェクトでGroupByを直接呼び出すか、GroupBy.groups属性(上記を参照)で呼び出すことができます。

len(g)
# 6

len(g.groups)    
# 6

これは GroupByオブジェクト属性 で文書化されています。

3)ジェネレーター式

完全を期すために、groupbyオブジェクトを反復処理して、各グループを明示的にカウントすることもできます。

sum(1 for _ in g)
# 6

しかし、実際に各グループのサイズが必要な場合はどうなりますか?

あなたは幸運です。そのための関数GroupBy.sizeがあります。

g.size()

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

sizeもNaNをカウントすることに注意してください。 NaNをカウントしたくない場合は、代わりにGroupBy.countを使用してください。

23
cs95