83

.size()各グループに含まれるアイテムの数をカウントするために、groupby の結果を使用しています。

列名配列を手動で編集せずに結果を新しい列名に保存したいのですが、どうすればよいですか?

これは私が試したことです:

grpd = df.groupby(['A','B'])
grpd['size'] = grpd.size()
grpd

そして私が得たエラー:

TypeError: 'DataFrameGroupBy' オブジェクトは項目の割り当てをサポートしていません (2 行目)

4

5 に答える 5

97

.size()DataFrameGroupBy オブジェクトの組み込みメソッドは、実際には DataFrame ではなく、グループ サイズを持つ Series オブジェクトを返します。列がグループ サイズであり、グループによってインデックス付けされ、カスタム名を持つ DataFrame が必要な場合は、.to_frame()メソッドを使用して、目的の列名を引数として使用できます。

grpd = df.groupby(['A','B']).size().to_frame('size')

グループを再び列にしたい場合は.reset_index()、最後に a を追加できます。

于 2016-11-29T17:56:47.803 に答える
48

が必要です-のは以前と同じです:transform sizelendf

知らせ:

ここでは、 の後に 1 列を追加する必要groupbyがあります。そうしないと、エラーが発生します。GroupBy.sizecountも同様であるためNaN、どの列が使用されるかは重要ではありません。すべての列が同じように機能します。

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df['size'] = df.groupby(['A', 'B'])['A'].transform('size')
print (df)
   A  B  size
0  x  a     1
1  x  c     2
2  x  c     2
3  y  b     2
4  y  b     2

集計で列名を設定する必要がある場合df- lenofdfは明らかに以前と同じではありません:

import pandas as pd

df = pd.DataFrame({'A': ['x', 'x', 'x','y','y']
                , 'B': ['a', 'c', 'c','b','b']})
print (df)
   A  B
0  x  a
1  x  c
2  x  c
3  y  b
4  y  b

df = df.groupby(['A', 'B']).size().reset_index(name='Size')
print (df)
   A  B  Size
0  x  a     1
1  x  c     2
2  y  b     2
于 2016-07-06T13:12:33.543 に答える
3

Series の代わりに DataFrame を取得するようにas_indexパラメータをgroupby設定できます。False

df = pd.DataFrame({'A': ['a', 'a', 'b', 'b'], 'B': [1, 2, 2, 2]})

df.groupby(['A', 'B'], as_index=False).size()

出力:

   A  B  size
0  a  1     1
1  a  2     1
2  b  2     2
于 2021-09-01T06:59:02.257 に答える