如何用Pandas统计所有商品组合的购买频次?
统计所有商品组合的用户购买频次
需求说明
需要统计所有可能的商品组合对应的独立购买用户数,涵盖单个商品、两两组合、多商品组合等所有非空商品子集的用户购买频次。
交易数据示例
userid product u1 A u1 B u1 C u2 A u2 C
期望统计结果
combination count_of_distinct_users A 2 B 1 C 2 A, B 1 A, C 2 B, C 1 A, B, C 1
实现方案(Python示例)
通过以下步骤完成统计:
- 按用户分组,收集每个用户购买的商品集合
- 为每个用户的商品集合生成所有非空子集
- 统计每个子集对应的独立用户数
代码实现:
import itertools from collections import defaultdict # 模拟交易数据 transactions = [ ("u1", "A"), ("u1", "B"), ("u1", "C"), ("u2", "A"), ("u2", "C"), ] # 按用户分组,整理每个用户的购买商品集合 user_product_sets = defaultdict(set) for user_id, product in transactions: user_product_sets[user_id].add(product) # 统计各商品组合的用户数 combo_count = defaultdict(int) for products in user_product_sets.values(): # 生成当前用户商品集合的所有非空子集 for subset_len in range(1, len(products) + 1): # 对子集元素排序,保证组合格式统一(如避免出现B,A这类与A,B重复的组合) for subset in itertools.combinations(sorted(products), subset_len): combo_key = ", ".join(subset) combo_count[combo_key] += 1 # 按组合长度、组合内容排序后输出 sorted_combos = sorted(combo_count.items(), key=lambda x: (len(x[0].split(", ")), x[0])) print("combination count_of_distinct_users") for combo, count in sorted_combos: print(f"{combo:<12} {count}")
运行上述代码即可得到与期望一致的统计结果。
内容的提问来源于stack exchange,提问作者dimitris_ps
相关产品推荐
相关产品推荐

