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

如何在Pandas DataFrame中聚合指定行并生成唯一SKU列表

Pandas聚合时生成唯一SKU列表的解决方案

针对你在处理百万行交易DataFrame时,聚合相同transactionID行后SKU出现重复的问题,提供以下几种解决方法:

1. 快速去重(不保留顺序)

利用集合自动去重的特性,在聚合时直接转换:

result = df.groupby(
    ['ProductID','partner','date','customerID','brand','transactionID']
).aggregate(
    {'sku': lambda x: list(set(x)), 
     'gmv': 'sum'}
).reset_index()

特点:代码简洁,执行效率高,但会打乱SKU的原始出现顺序。

2. 去重并保留原始顺序

如果需要保留SKU在原数据中首次出现的顺序,使用dict.fromkeys()实现:

result = df.groupby(
    ['ProductID','partner','date','customerID','brand','transactionID']
).aggregate(
    {'sku': lambda x: list(dict.fromkeys(x)), 
     'gmv': 'sum'}
).reset_index()

原理:dict.fromkeys(x)会按元素首次出现的顺序生成无重复键的字典,转成列表后即可得到保序的唯一SKU列表。

3. 百万级数据性能优化

针对数百万行的大数据量,先通过drop_duplicates预先去除同一交易内的重复SKU行,再进行聚合,能显著提升效率:

# 先去除同一交易组内的重复SKU记录
df_unique_sku = df.drop_duplicates(
    subset=['ProductID','partner','date','customerID','brand','transactionID','sku']
)
# 再执行聚合操作
result = df_unique_sku.groupby(
    ['ProductID','partner','date','customerID','brand','transactionID']
).aggregate(
    {'sku': list, 
     'gmv': 'sum'}
).reset_index()

优势:减少了groupby阶段的处理数据量,避免自定义lambda函数的性能开销,更适合大规模数据处理。

内容的提问来源于stack exchange,提问作者FábioRB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:30:44