python - 使用 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
我需要创建一个新列,对具有相同nome
和code
where的行求和tipo = 'Memb'
,其方式如下所示:
我试过groupby
了,transform('sum')
但它让我得到了错误的结果。
df['score'].loc[df['tipo'] == "Memb"]=df[['nome','code','score']].groupby(['nome','code'])['score'].transform('sum')
我错过了什么?
解决方案
为了提高性能,可以将值替换score
为,然后使用with :0
Series.mask
GroupBy.transform
sum
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
推荐阅读
- haxe - 从类中提取 T
并在课堂建设中使用 T - swift - 当内容太长时,具有 .estimated 宽度的组合布局项目会使应用程序崩溃
- python - 如何在 windows 上让 neovim 识别 python?
- spring - 春天 - tomcat - NoSuchMethodError setContentLengthLong
- python - Python Package Install - 识别依赖包
- go - AWS SDK GO V2 DynamoDB - 迁移到 V2 后 ADD 不再起作用
- macos - 在 Mac OS 上找不到 Confluent
- mysql - Getting error com.mysql.cj.jdbc.exceptions.CommunicationsException: JDBC on mysql container
- r - Write a list from "munsell"
- android - How to import classes from an dex file in Android Studio