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

使用Python统计DataFrame中跨订单出现频次最高的商品类别对

数据集说明

该数据集共4列,下方仅展示前14行,实际总数据量超10000行,同一订单下会向客户售卖多款商品。

统计需求

统计所有订单中共同出现频次最高的商品类别对,例如(Cat1和Cat2)。仅使用Python实现,可调用numpy、pandas等常用第三方库。

备注
  • 商品仅包含3个类别
  • ProdID为唯一标识列
  • OrderID、Client ID不存在重复值
示例数据
OrderID ProdID Prodcategory Client ID
4997    1   Cat 1   21
4997    2   Cat 1   22
4997    3   Cat 2   23
4997    4   Cat 3   24
2001    5   Cat 1   25
2001    6   Cat 2   26
2001    7   Cat 2   27
2001    8   Cat 2   28
2001    9   Cat 3   29
2376    10  Cat 3   30
2376    11  Cat 1   31
2376    12  Cat 2   32
2376    13  Cat 3   33
2376    14  Cat 1   34
统计规则

同一订单下的所有不重复类别两两组成配对,每对在单个订单中仅计数1次,最终统计所有订单中各配对的总出现次数,找出频次最高的配对。例如订单4997中(Cat 1, Cat 2)、(Cat 2, Cat 3)、(Cat 1, Cat 3 )各计数1次,订单2001中该三类配对也各计数1次,最终统计所有订单的总计数即可得到结果。

原有方案问题

原有实现仅能统计单个类别的整体出现频次,无法统计类别配对的共同出现频次,无法满足需求,原有代码如下:

# Import required libraries
import pandas as pd
import matplotlib.pyplot as plt

# Read the data into the dataframe
#df = pd.read_clipboard()
df

df.columns

df["Product category "].value_counts()

mylabels = ['Cat 2', 'Cat 1', 'Cat 3']
plt.pie(df["Product category "].value_counts(), labels = mylabels)
plt.show() 
可行实现方案

核心思路是先按订单分组去重类别,再生成两两无顺序配对统计次数,代码如下:

import pandas as pd
from itertools import combinations

# 读取数据,可替换为pd.read_csv("你的数据文件路径.csv")
df = pd.read_clipboard()

# 按订单ID分组,获取每个订单下的唯一商品类别
order_unique_cats = df.groupby('OrderID')['Prodcategory'].unique()

pair_count = {}
for cats in order_unique_cats:
    # 仅处理包含2类及以上商品的订单
    if len(cats) >= 2:
        # 生成排序后的两两无重复组合,避免(Cat1,Cat2)和(Cat2,Cat1)被判定为不同配对
        for pair in combinations(sorted(cats), 2):
            pair_count[pair] = pair_count.get(pair, 0) + 1

# 转换为Series方便排序查看
pair_result = pd.Series(pair_count).sort_values(ascending=False)

# 输出结果
print("所有类别对出现频次:")
print(pair_result)
print(f"\n频次最高的类别对为{pair_result.index[0]},共出现{pair_result.iloc[0]}次")

示例数据运行结果

上述示例数据中3个订单均同时包含3类商品,因此3个配对的出现次数均为3次,运行后输出如下:

所有类别对出现频次:
(Cat 1, Cat 2)    3
(Cat 1, Cat 3)    3
(Cat 2, Cat 3)    3
dtype: int64

频次最高的类别对为('Cat 1', 'Cat 2'),共出现3次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:07