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

Python中如何高效转换ECLAT算法用横向交易数据为竖向格式

高效转换订单商品数据为ECLAT竖向格式的Python实现方法

以下两种实现方案性能远优于原双层循环写法:

方案1:Pandas内置GroupBy聚合(最简洁,适合绝大多数场景)

Pandas的groupby操作经过C层面优化,仅需一行代码即可完成转换,时间复杂度仅为O(n)(n为数据总行数),远优于原有双层循环的O(mn)复杂度(m为SKU数量):

# 直接按商品SKU分组,将对应订单编号聚合为列表,再转字典
vert_dict = order_code.groupby('item_code')['order_no'].agg(list).to_dict()

如果同一个订单中可能重复出现同一个SKU、需要对订单编号去重,可以调整聚合逻辑:

vert_dict = order_code.groupby('item_code')['order_no'].agg(lambda x: list(x.unique())).to_dict()

方案2:collections.defaultdict遍历(适合超大数据量场景)

如果数据量达到千万级以上,希望降低内存开销,可以用Python标准库的defaultdict实现,仅遍历一次数据集即可完成构建:

from collections import defaultdict

vert_dict = defaultdict(list)
# itertuples遍历DataFrame的效率比iloc索引高10~100倍
for order_no, item_code in order_code.itertuples(index=False):
    vert_dict[item_code].append(order_no)

# 可选:转为普通字典格式
vert_dict = dict(vert_dict)

需要去重的场景可以用集合存储再转列表:

from collections import defaultdict

vert_dict = defaultdict(set)
for order_no, item_code in order_code.itertuples(index=False):
    vert_dict[item_code].add(order_no)
# 转换为要求的列表格式
vert_dict = {k: list(v) for k, v in vert_dict.items()}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:06:00