You need to enable JavaScript to run this app. pandas中如何高效统计购买列的产品组合分组出现次数
优惠活动
大模型
产品
解决方案
定价
更多

pandas中如何高效统计购买列的产品组合分组出现次数

Pandas 高效实现客户购买产品组合频次统计

核心统计逻辑

遍历每个客户的购买记录,拆解出所有符合规则的产品子集组合,统计每个组合的累计出现频次、关联的客户ID列表,最终筛选重复度高的产品组合做归类分析。

分步实现代码

1. 基础数据预处理

将原始表中逗号分隔的购买产品字符串,拆分排序为结构化的产品列表,避免因为产品书写顺序不一致导致组合匹配错误:

import pandas as pd
from itertools import combinations
from collections import defaultdict

# 加载原始示例数据
df = pd.DataFrame({
    "客户ID": [1,2,3,4,5],
    "购买产品": ["A,B", "B,C,D", "A,B,C", "C,D,E", "A,B,C,D"]
})

# 拆分产品字符串为排序列表
df["结构化产品集"] = df["购买产品"].apply(lambda x: sorted(x.split(",")))

2. 组合频次核心统计

使用可哈希的frozenset作为组合存储键,匹配不受产品顺序影响,同时搭配默认字典减少重复判断开销:

# 存储每个产品组合对应的关联客户列表
combo_record = defaultdict(list)

for _, row in df.iterrows():
    products = row["结构化产品集"]
    cust_id = row["客户ID"]
    # 生成组合时从长度2开始遍历,覆盖所有多产品组合场景(如需单产品统计可将起始值改为1)
    for combo_length in range(2, len(products)+1):
        for combo in combinations(products, combo_length):
            # 用不可变集合作为键,支持哈希匹配
            combo_key = frozenset(combo)
            combo_record[combo_key].append(cust_id)

3. 规整输出结果

将统计字典转换为结构化DataFrame,按出现频次降序排列,和预期输出效果对齐:

# 生成最终结果表
stat_result = pd.DataFrame([
    {
        "产品组合": set(combo),
        "出现次数": len(customer_list),
        "关联客户": customer_list
    }
    for combo, customer_list in combo_record.items()
])

# 按出现次数从高到低排序
stat_result = stat_result.sort_values("出现次数", ascending=False).reset_index(drop=True)

运行后输出的结果完全匹配示例要求:

  • 组合{A,B}出现次数为3,关联客户为1、3、5
  • 组合{B,C}出现次数为3,关联客户为2、3、5
  • 组合{C,D}出现次数为3,关联客户为2、4、5
  • 组合{A,B,C}出现次数为2,关联客户为3、5
  • 组合{B,C,D}出现次数为2,关联客户为2、5

性能优化注意事项

  • 当数据量较大、单客户购买产品数较多时,不要无限制生成所有长度的组合,可根据业务需求设定最长组合长度阈值,避免全量幂集计算带来的内存爆炸问题
  • 统计时可提前设置最低出现次数阈值,对低频次组合做提前过滤,减少后续结果的处理量
  • 若需要快速定位高频组合,可直接基于结果表的出现次数列做筛选,无需额外做分组聚合计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 11:57:03