看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据处理业务实践中,有很多不规整的数据,需要将它们进行一系列的计算和统计,在今天的案例中,我们要将一个用逗号隔开的项目分别统计进它所在的统计项。
假定我们有以下数据:
import pandas as pd
import io
data = '''
名称 金额
苹果,鸭梨 50
鸭梨,桔子 60
桔子,香蕉 70
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
# ...
名称中都有两个水果,并用逗号分隔,后边的金额是它们共用的。
需求为将每个水果(即拆开逗号分隔的水果)的金额相加汇总,最终形成一个字典,键为水果为,值为总金额。即:
{'苹果': 50, '鸭梨': 110, '桔子': 130, '香蕉': 70}
面对用逗号隔开的列表类型数据,我们第一时间想到的是将它进行爆炸,在爆炸前将它处理为列表。
接着再按名称分组,聚合它们的金额就得到了一个统计后的 Series,最后再将这个 Series 转为字典即可。
拆分字符串,爆炸:
(
df.assign(名称=df.名称.str.split(','))
.explode('名称')
)
'''
名称 金额
0 苹果 50
0 鸭梨 50
1 鸭梨 60
1 桔子 60
2 桔子 70
2 香蕉 70
'''
分组、聚合,再转字典,一气呵成!
(
df.assign(名称=df.名称.str.split(','))
.explode('名称')
.groupby('名称', sort=False)
.金额
.sum()
.to_dict()
)
# {'苹果': 50, '鸭梨': 110, '桔子': 130, '香蕉': 70}
这样就完成了最终的需求结果。
(完)
更新时间:2024-08-18 16:22:19 标签:pandas python 文本 字典