pandasはgroupbyデータフレームに列を追加します 質問する

pandasはgroupbyデータフレームに列を追加します 質問する

次のような単純なデータフレームがありますdf:

df = pd.DataFrame({'c':[1,1,1,2,2,2,2],'type':['m','n','o','m','m','n','n']})

type私の目標は、各の値をカウントしc、サイズ の列を追加することですc。まず、次の操作から始めます。

In [27]: g = df.groupby('c')['type'].value_counts().reset_index(name='t')

In [28]: g
Out[28]: 
   c type  t
0  1    m  1
1  1    n  1
2  1    o  1
3  2    m  2
4  2    n  2

最初の問題は解決しました。次に、次のことも実行できます。

In [29]: a = df.groupby('c').size().reset_index(name='size')

In [30]: a
Out[30]: 
   c  size
0  1     3
1  2     4

最初のデータフレームに列を直接追加するにはどうすればよいですかsize? これまではmap次のように使用していました:

In [31]: a.index = a['c']

In [32]: g['size'] = g['c'].map(a['size'])

In [33]: g
Out[33]: 
   c type  t  size
0  1    m  1     3
1  1    n  1     3
2  1    o  1     3
3  2    m  2     4
4  2    n  2     4

これは機能しますが、これを行うためのより簡単な方法はありますか?

ベストアンサー1

使用transform集計から元の DF に列を追加するにはgroupby、元の DF に揃えられたインデックスをtransform持つ を返します。Series

In [123]:
g = df.groupby('c')['type'].value_counts().reset_index(name='t')
g['size'] = df.groupby('c')['type'].transform('size')
g

Out[123]:
   c type  t  size
0  1    m  1     3
1  1    n  1     3
2  1    o  1     3
3  2    m  2     4
4  2    n  2     4

おすすめ記事