熊猫将列添加到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

哪个有效,但是有更简单的方法吗?


幕布斯7119047
浏览 397回答 2
2回答

拉风的咖菲猫

使用transform从添加一列回原稿DF groupby聚集,transform返回Series其索引对准原稿DF:In [123]:g = df.groupby('c')['type'].value_counts().reset_index(name='t')g['size'] = df.groupby('c')['type'].transform('size')gOut[123]:   c type  t  size0  1    m  1     31  1    n  1     32  1    o  1     33  2    m  2     44  2    n  2     4

Qyouu

另一个解决方案:transform lendf['size'] = df.groupby('c')['type'].transform(len)print df   c type size0  1    m    31  1    n    32  1    o    33  2    m    44  2    m    45  2    n    46  2    n    4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python