You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")

这一步得到的中间结果是:

CLIENTAGREEMENT_IDPRODUCT_COUNT
114433
18881
1145431
21551

步骤3:按客户计算聚合指标

接着按CLIENT分组,对PRODUCT_COUNT列计算我们需要的三个统计量:

# 按CLIENT聚合,计算平均值、中位数、最大值
final_result = agreement_product_counts.groupby("CLIENT")["PRODUCT_COUNT"].agg(
    平均值="mean",
    中位数="median",
    最大值="max"
).reset_index()

最终输出结果

运行后得到的final_result就是目标DataFrame:

CLIENT平均值中位数最大值
11.6666671.03
21.01.01

小提醒:你提到的CLIENT 1的中位数为2应该是笔误哦~CLIENT 1的协议产品数列表是[3,1,1],排序后是[1,1,3],中位数是1才对哒!

内容的提问来源于stack exchange,提问作者dingaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:26:19