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

Python中利用Groupby查找订单内重复Item_ID的高效方法

嘿,这个需求我太熟悉了!要高效找出每个订单里重复出现的商品ID,我给你两种方案,其中基于pandas的实现绝对是大数据量下的最优选择,性能拉满:

最高效实现方案:Pandas(推荐)

Pandas针对表格型数据的分组统计做了大量底层优化(基于C扩展),比纯Python循环快得多,尤其是数据量上万甚至几十万行的时候,差距会非常明显。

实现步骤&代码

import pandas as pd

# 1. 构造数据集(如果是从CSV/Excel读取,直接用pd.read_csv/pd.read_excel即可)
order_data = [
    [101, 121],
    [101, 121],
    [101, 223],
    [101, 234]
]
df = pd.DataFrame(order_data, columns=["Order_ID", "Item_ID"])

# 2. 分组统计每个(订单ID, 商品ID)的出现频率
freq_df = df.groupby(["Order_ID", "Item_ID"]).size().reset_index(name="freq")

# 3. 筛选出频率大于1的记录
result = freq_df[freq_df["freq"] > 1]

# 4. 输出你要的格式(如果需要保存到文件,把print换成to_csv的路径参数即可)
print(result.to_csv(index=False, header=True))

执行后会输出:

Order_ID,Item_ID,freq
101,121,2
纯Python备选方案(小数据量适用)

如果不想引入pandas依赖,用标准库的collections模块也能实现,但性能不如pandas,适合数据量很小的场景:

from collections import defaultdict, Counter

order_data = [
    (101, 121),
    (101, 121),
    (101, 223),
    (101, 234)
]

# 先按订单ID分组,收集每个订单下的所有商品ID
order_item_map = defaultdict(list)
for order_id, item_id in order_data:
    order_item_map[order_id].append(item_id)

# 统计每个订单内的商品频率,筛选重复项
result_rows = []
for order_id, items in order_item_map.items():
    item_counts = Counter(items)
    for item_id, freq in item_counts.items():
        if freq > 1:
            result_rows.append((order_id, item_id, freq))

# 格式化输出
print("Order_ID, Item_ID, freq")
for row in result_rows:
    print(f"{row[0]},{row[1]},{row[2]}")

总结

  • 数据量小:两种方案都能用,纯Python方案不需要额外依赖
  • 数据量大/追求性能:优先选Pandas方案,底层优化带来的性能提升非常显著

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:08:05