Pandas groupby + 变换和多列

为了获得在 groupby-data 上执行的结果与原始 DataFrame 具有相同的细节级别(相同的观察计数),我使用了转换函数。


示例: 原始数据框


name, year, grade

Jack, 2010, 6

Jack, 2011, 7

Rosie, 2010, 7

Rosie, 2011, 8

groupby 变换后


name, year, grade, average grade

Jack, 2010, 6, 6.5

Jack, 2011, 7, 6.5

Rosie, 2010, 7, 7.5

Rosie, 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   e

1   1   q   z   12

2   2   q   z   12

3   3   q   z   12

4   4   q   o   8

5   5   w   o   22

6   6   w   o   22


慕码人2483693
浏览 330回答 2
2回答

鸿蒙传说

您可以使用GroupBy+transform用sum两次:df['e'] = df.groupby(['c', 'd'])[['a', 'b']].transform('sum').sum(1)print(df)   a  b  c  d   e0  1  1  q  z  121  2  2  q  z  122  3  3  q  z  123  4  4  q  o   84  5  5  w  o  225  6  6  w  o  22
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python