在 Pandas (python) 中,如何添加一个包含两列引用的 groupby 的列

我正在尝试向 Pandas GroupBy DataFrame 添加一列。新列(E) 是列(C) 上具有相同键(A,B) 的值的总和。该键由数据帧的另外两列(A,B) 组成。


This is my Dataframe         


     A   B    C   D

0   foo one   1  15  

1   bar one   2  10  

2   foo two   4  20  

3   bar three 4  5   

4   foo two   5  6   

5   bar two   6  9   

6   foo one   7  8    

7   foo three 8  15  


what I want:

     A   B    C  D     E

0   foo one   1  15    8

1   bar one   2  10    2

2   foo two   4  20    9

3   bar three 4   5    4 

4   foo two   5  6     9

5   bar two   6  9     6

6   foo one   7  8     8

7   foo three 8 15     8

这是我的代码


df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',

   ...:                           'foo', 'bar', 'foo', 'foo'],

   ...:                    'B' : ['one', 'one', 'two', 'three',

   ...:                           'two', 'two', 'one', 'three'],

   ...:                    'C' : ['1','2','4','4','5','6','7','8'],

   ...:                    'D' : ['15','10','20','5','6','9','8','15']})

我已经尝试过的


df['E'] =df['C'].groupby(df['A,B']).transform('sum') 

但不起作用


回首忆惘然
浏览 326回答 2
2回答

婷婷同学_

您可以通过 A 和 B 计算 C 的聚合总和,然后将结果数据帧与原始数据帧合并>> df     A      B  C   D0  foo    one  1  151  bar    one  2  102  foo    two  4  203  bar  three  4   54  foo    two  5   65  bar    two  6   96  foo    one  7   87  foo  three  8  15df2 = df.groupby(['A','B']).sum().drop(['D'], axis=1).rename(columns={'C':'E'})    >> df2           EA   B       bar one    2    three  4    two    6foo one    8    three  8    two    9合并df和df2可以得到结果:>> df.merge(df2.reset_index(), on=['A', 'B'], how='left')     A      B  C   D  E0  foo    one  1  15  81  bar    one  2  10  22  foo    two  4  20  93  bar  three  4   5  44  foo    two  5   6  95  bar    two  6   9  66  foo    one  7   8  87  foo  three  8  15  8
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python