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

Pandas groupby + 变换和多列

Pandas groupby + 变换和多列

慕码人2483693 2021-08-11 19:56:37
为了获得在 groupby-data 上执行的结果与原始 DataFrame 具有相同的细节级别(相同的观察计数),我使用了转换函数。示例: 原始数据框name, year, gradeJack, 2010, 6Jack, 2011, 7Rosie, 2010, 7Rosie, 2011, 8groupby 变换后name, year, grade, average gradeJack, 2010, 6, 6.5Jack, 2011, 7, 6.5Rosie, 2010, 7, 7.5Rosie, 2011, 8, 7.5但是,使用基于多列的更高级函数,事情会变得更加复杂。让我感到困惑的是,我似乎无法访问 groupby-transform 组合中的多个列。df = pd.DataFrame({'a':[1,2,3,4,5,6],               'b':[1,2,3,4,5,6],               'c':['q', 'q', 'q', 'q', 'w', 'w'],                 'd':['z','z','z','o','o','o']})def f(x): y=sum(x['a'])+sum(x['b']) return(y)df['e'] = df.groupby(['c','d']).transform(f)给我:KeyError: ('a', 'occurred at index a')虽然我知道以下确实有效:df.groupby(['c','d']).apply(f)是什么导致了这种行为以及我如何获得这样的东西:a   b   c   d   e1   1   q   z   122   2   q   z   123   3   q   z   124   4   q   o   85   5   w   o   226   6   w   o   22
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以使用GroupBy+transform用sum两次:


df['e'] = df.groupby(['c', 'd'])[['a', 'b']].transform('sum').sum(1)


print(df)


   a  b  c  d   e

0  1  1  q  z  12

1  2  2  q  z  12

2  3  3  q  z  12

3  4  4  q  o   8

4  5  5  w  o  22

5  6  6  w  o  22


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 329 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号