Pandas基于两现有列创建新列并分组聚合求和的实现方法
实现方案
直接使用pandas内置的透视表+分组聚合功能即可实现,全程不需要写for循环,代码简洁且适配同邮箱多笔同档位订单的场景。
核心代码
import pandas as pd # 构造原始DataFrame dummy_dict_existing = {'Email':['joblogs@gmail.com', 'joblogs@gmail.com'], 'Ticket_Category': ['Tier1', 'Tier2'], 'Quantity_Purchased': [5,2], 'Total_Price_Paid':[1345.45, 10295.88]} df = pd.DataFrame(dummy_dict_existing) # 一步完成列转换+金额聚合 result = df.pivot_table( index = "Email", columns = "Ticket_Category", values = "Quantity_Purchased", aggfunc = "sum", fill_value = 0 ).add_suffix("_Quantity_Purchased").join( df.groupby("Email")["Total_Price_Paid"].sum() ).reset_index()
输出结果
执行print(result)即可得到你需要的目标结构:
Email Tier1_Quantity_Purchased Tier2_Quantity_Purchased Total_Price_Paid 0 joblogs@gmail.com 5 2 11641.33
说明
- 用
pivot_table把票档维度的行数据转成独立列,add_suffix自动给生成的Tier1、Tier2列加上你需要的后缀名 aggfunc="sum"对同邮箱同票档的购票数量自动求和,比取首值的写法更鲁棒,即使后续同一个用户同票档有多条订单也能正确统计fill_value=0会把用户未购买的票档数量自动填充为0,避免出现空值- 最后通过join拼接按邮箱分组求和的总支付金额即可
内容的提问来源于stack exchange,提问作者Cummins070
相关产品推荐
相关产品推荐

