首页 > 解决方案 > 使用 groupby 选择行,对列求和并使用所有 groupby 元素的总和创建新列

问题描述

我有这个数据框:

nome       code  tipo   score
Alexandre   AAA  Frads  4000
Alexandre   AAA  Memb   10000
Alexandre   AAA  Memb   20000
Bruno       BBB  Dans   10000
Bruno       BBB  Grap   4000

此 Google 表格中可用的值

我需要创建一个新列,对具有相同nomecodewhere的行求和tipo = 'Memb',其方式如下所示:

在此处输入图像描述

我试过groupby了,transform('sum')但它让我得到了错误的结果。

df['score'].loc[df['tipo'] == "Memb"]=df[['nome','code','score']].groupby(['nome','code'])['score'].transform('sum')

在此处输入图像描述

我错过了什么?

标签: pythonpandaspandas-groupby

解决方案


为了提高性能,可以将值替换score为,然后使用with :0Series.maskGroupBy.transformsum

df['Memb_sum']  = (df.assign(score=df['score'].mask(df['tipo'] != 'Memb', 0))
                     .groupby(['nome','code'])['score']
                     .transform('sum'))
print (df)
        nome code   tipo  score  Memb_sum
0  Alexandre  AAA  Frads   4000     30000
1  Alexandre  AAA   Memb  10000     30000
2  Alexandre  AAA   Memb  20000     30000
3      Bruno  BBB   Dans  10000         0
4      Bruno  BBB   Grap   4000         0

详情

print (df.assign(score=df['score'].mask(df['tipo'] != 'Memb', 0)))

        nome code   tipo  score
0  Alexandre  AAA  Frads      0
1  Alexandre  AAA   Memb  10000
2  Alexandre  AAA   Memb  20000
3      Bruno  BBB   Dans      0
4      Bruno  BBB   Grap      0   

推荐阅读