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

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

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

回首忆惘然 2021-10-12 16:32:51
我正在尝试向 Pandas GroupBy DataFrame 添加一列。新列(E) 是列(C) 上具有相同键(A,B) 的值的总和。该键由数据帧的另外两列(A,B) 组成。This is my Dataframe              A   B    C   D0   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     E0   foo one   1  15    81   bar one   2  10    22   foo two   4  20    93   bar three 4   5    4 4   foo two   5  6     95   bar two   6  9     66   foo one   7  8     87   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') 但不起作用
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可以通过 A 和 B 计算 C 的聚合总和,然后将结果数据帧与原始数据帧合并


>> df

     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


df2 = df.groupby(['A','B']).sum().drop(['D'], axis=1).rename(columns={'C':'E'})    


>> df2

           E

A   B       

bar one    2

    three  4

    two    6

foo one    8

    three  8

    two    9

合并df和df2可以得到结果:


>> df.merge(df2.reset_index(), on=['A', 'B'], how='left')


     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


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

添加回答

举报

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