为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫将列添加到groupby数据框

熊猫将列添加到groupby数据框

幕布斯7119047 2019-12-05 14:49:44
我有这个简单的数据框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]: gOut[28]:    c type  t0  1    m  11  1    n  12  1    o  13  2    m  24  2    n  2第一个问题解决了。然后,我还可以:In [29]: a = df.groupby('c').size().reset_index(name='size')In [30]: aOut[30]:    c  size0  1     31  2     4如何将size列直接添加到第一个数据帧?到目前为止,我用作map:In [31]: a.index = a['c']In [32]: g['size'] = g['c'].map(a['size'])In [33]: gOut[33]:    c type  t  size0  1    m  1     31  1    n  1     32  1    o  1     33  2    m  2     44  2    n  2     4哪个有效,但是有更简单的方法吗?
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超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')

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


查看完整回答
反对 回复 2019-12-05
?
Qyouu

TA贡献1786条经验 获得超11个赞

另一个解决方案:transform len


df['size'] = df.groupby('c')['type'].transform(len)

print df

   c type size

0  1    m    3

1  1    n    3

2  1    o    3

3  2    m    4

4  2    m    4

5  2    n    4

6  2    n    4


查看完整回答
反对 回复 2019-12-05
  • 2 回答
  • 0 关注
  • 392 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信