如何在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
相关产品推荐
相关产品推荐

