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

如何用Pandas实现分组并找出与Snack一同购买的Top3商品?

解决与Snack一同购买的Top3商品统计问题

核心逻辑是锁定包含Snack的所有订单(Invoice),再统计这些订单里除Snack外的商品出现频次,最后取Top3。以下是具体实现步骤:

步骤1:筛选包含Snack的订单编号

先提取所有购买了Snack的订单ID,确保后续只分析这些关联订单:

import pandas as pd

# 假设数据已加载到DataFrame中(替换成你的数据加载方式)
df = pd.read_csv("你的数据文件.csv")

# 获取所有包含Snack的订单编号
snack_invoices = df[df['ItemDescription'] == 'Snack']['Invoice'].unique()

步骤2:提取关联订单中的非Snack商品

筛选出这些订单里的所有商品,排除Snack本身,得到所有和Snack一同购买的商品列表:

# 筛选目标订单且商品不是Snack的数据
co_purchased_items = df[
    df['Invoice'].isin(snack_invoices) & 
    (df['ItemDescription'] != 'Snack')
]['ItemDescription']

步骤3:统计频次并取Top3

用value_counts()统计每个商品的出现次数,再取前3个并按要求格式输出:

# 统计频次并排序,取Top3
top3_items = co_purchased_items.value_counts().head(3)

# 输出指定格式结果
for idx, item in enumerate(top3_items.index):
    print(f"{idx} {item}")

样本数据测试结果

用你提供的样本数据运行上述代码,输出如下:

0 Drink
1 Meat
2 Produce

完全匹配预期结果。

补充说明

  • 这里用Invoice作为同一笔购买的标识(同一Invoice下的商品属于同一次购买),如果业务中需用Customer+PurchaseDate标识同次购买,只需替换筛选条件对应的字段即可。
  • 8000行数据量极小,该方法运行效率无任何问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36