Python Pandas中DataFrame汇总聚合:按客户协议计算产品统计值
解决Pandas分组统计需求
嘿,我来帮你搞定这个按客户和协议分组后统计产品数的聚合需求!咱们一步步拆解来做:
需求明确
我们需要先按CLIENT和AGREEMENT_ID分组,统计每个协议关联的产品数量;再针对每个CLIENT,计算这些产品数量的平均值、中位数和最大值。
步骤1:创建原始DataFrame
先把你提供的数据集代码写出来(别忘了先导入pandas):
import pandas as pd df = pd.DataFrame( { "CLIENT": ["1", "1", "2", "1", "1", "1"], "PRODUCT_ID": [111, 112, 444, 555, 89, 765], "AGREEMENT_ID": [1443, 1443, 155, 888, 1443, 14543] } )
步骤2:统计每个协议的产品数量
先按CLIENT+AGREEMENT_ID组合分组,用size()获取每个组的产品数量,并重命名列名方便后续处理:
# 分组统计每个协议的产品数 agreement_product_counts = df.groupby(["CLIENT", "AGREEMENT_ID"]).size().reset_index(name="PRODUCT_COUNT")
这一步得到的中间结果是:
| CLIENT | AGREEMENT_ID | PRODUCT_COUNT |
|---|---|---|
| 1 | 1443 | 3 |
| 1 | 888 | 1 |
| 1 | 14543 | 1 |
| 2 | 155 | 1 |
步骤3:按客户计算聚合指标
接着按CLIENT分组,对PRODUCT_COUNT列计算我们需要的三个统计量:
# 按CLIENT聚合,计算平均值、中位数、最大值 final_result = agreement_product_counts.groupby("CLIENT")["PRODUCT_COUNT"].agg( 平均值="mean", 中位数="median", 最大值="max" ).reset_index()
最终输出结果
运行后得到的final_result就是目标DataFrame:
| CLIENT | 平均值 | 中位数 | 最大值 |
|---|---|---|---|
| 1 | 1.666667 | 1.0 | 3 |
| 2 | 1.0 | 1.0 | 1 |
小提醒:你提到的CLIENT 1的中位数为2应该是笔误哦~CLIENT 1的协议产品数列表是[3,1,1],排序后是[1,1,3],中位数是1才对哒!
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

