如何在Python中基于GroupBy与多聚合操作生成新DataFrame
Python Pandas 按销售人员汇总数据实现方法
注:如果你的DataFrame中「售出数量」列名确实是拼写错误的
Qauntities sold,请将代码中的Quantities sold替换为实际列名。
你可以通过Pandas的groupby结合agg方法快速实现需求,以下是两种直观的实现方式:
方法一:先计算销售金额列再聚合
这种方式逻辑更清晰,适合新手理解:
import pandas as pd # 1. 新增「销售金额」列,计算每一行的销售额(售出数量 × 单价) df['销售金额'] = df['Quantities sold'] * df['Unit Price'] # 2. 按销售人员分组,聚合计算三个指标 summary_df = df.groupby('Salesperson Name').agg( 不同客户数量=('Customer Name', 'nunique'), # 统计唯一客户数 售出数量中位数=('Quantities sold', 'median'), # 计算售出数量的中位数 销售总额=('销售金额', 'sum') # 求和得到销售总额 ).reset_index() # 将分组列从索引转为普通列
方法二:直接在聚合中计算销售总额
如果不想新增列,可以用lambda函数在聚合时直接计算:
import pandas as pd summary_df = df.groupby('Salesperson Name').agg( 不同客户数量=('Customer Name', 'nunique'), 售出数量中位数=('Quantities sold', 'median'), 销售总额=('Unit Price', lambda x: (x * df.loc[x.index, 'Quantities sold']).sum()) ).reset_index()
关键参数说明
groupby('Salesperson Name'):按销售人员姓名对数据分组agg():接受命名聚合参数,每个参数对应一个汇总指标,格式为「指标名=(列名, 聚合函数)」nunique:统计列中唯一值的数量,用来计算不同客户数median:计算列的中位数sum:对列的值求和,这里用来计算销售总额
执行完成后,summary_df就是你需要的汇总DataFrame,每条记录对应一位销售人员的三个汇总指标。
内容的提问来源于stack exchange,提问作者Jed
相关产品推荐
相关产品推荐

