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

Pandas如何统计同一购买订单中两两商品组合的出现次数

你已经完成了独热编码的预处理步骤,后续可以按以下逻辑处理得到目标结果:

  1. 首先按purchase分组聚合,得到每个订单下各水果的出现标记
# 按订单ID分组求和,同一个订单中出现过的水果值为1,未出现为0
purchase_item = df2.groupby('purchase').sum()
  1. 利用矩阵乘法计算两两水果的共现次数
    独热编码的转置矩阵与原矩阵相乘后,矩阵中第i行第j列的数值就是第i种水果和第j种水果共同出现的订单数:
# 计算共现矩阵
cooc_matrix = purchase_item.T.dot(purchase_item)
  1. 对共现矩阵做格式转换,得到最终长表结构
    需要剔除自己与自己的配对、重复的配对(避免同时出现apple-banana和banana-apple),再转换为目标格式:
import numpy as np

# 对角线值为水果自身的出现总次数,置为0剔除
np.fill_diagonal(cooc_matrix.values, 0)
# 仅保留矩阵上三角部分,避免重复配对
upper_matrix = cooc_matrix.where(np.triu(np.ones(cooc_matrix.shape), k=1).astype(bool))
# 转换为长表,删除空值后重命名列
result = upper_matrix.stack().reset_index()
result.columns = ['item_1', 'item_2', 'purchase']
# 可选:过滤共现次数为0的无效配对
result = result[result['purchase'] > 0].reset_index(drop=True)

如果你不想走独热编码的路线,也可以直接对每个订单的水果生成两两组合后统计次数,实现逻辑更直观:

from itertools import combinations
import pandas as pd

# 生成每个订单内的所有两两水果组合
order_combo = df.groupby('purchase')['item'].apply(lambda x: list(combinations(sorted(x), 2)))
# 统计所有组合的出现次数
result = order_combo.explode().value_counts().reset_index()
# 拆分组合列为两列,调整为目标格式
result[['item_1', 'item_2']] = pd.DataFrame(result['item'].tolist(), index=result.index)
result = result[['item_1', 'item_2', 'count']].rename(columns={'count': 'purchase'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:15:03