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

基于Pandas的超大数据集分组后多字段唯一/全量值拼接需求

超大规模Pandas分组拼接高效解决方案

原始数据集(5亿行规模)

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Name': ['A','A','A','A','B','B','B','B'],
    'Pair': ['b','c','d','e','b','f','d','g'],
    'List 1': ['1,2','2,3,4',np.nan,'5',np.nan,'1,2,3','3,6','5,4'],
    'List 2': ['1,2,3',',3,4','3','4,5',np.nan,'1,3','1,3,6','5,4']
})

处理需求

按Name字段分组完成以下操作:

  • Unique Pair:提取分组内唯一的Pair字符,排序后用逗号拼接
  • Unique List 1/2 Item:拆分List 1、List 2字段,去除空值后提取唯一元素,排序拼接
  • All List 1/2 Item:拆分List 1、List 2字段,保留所有元素(含重复),排序拼接

高效实现代码

针对5亿行的超大规模数据,避免用自定义apply循环,全程用Pandas矢量化+分组聚合的底层优化API:

1. 预处理List字段(处理空值+过滤无效元素)

# 替换NaN为空字符串,拆分后过滤空元素(比如原数据中',3,4'拆分出的空字符串)
for col in ['List 1', 'List 2']:
    df[col] = df[col].fillna('').str.split(',')
    df[col] = df[col].apply(lambda x: [i for i in x if i])

2. 分组聚合(核心高效逻辑)

# 定义聚合函数,均为批量处理逻辑
def unique_sorted_join(series):
    # 合并所有子列表→去重→排序→拼接
    unique_vals = sorted(set(item for sublist in series for item in sublist))
    return ','.join(unique_vals)

def all_sorted_join(series):
    # 合并所有子列表→排序→拼接(保留重复)
    all_vals = sorted(item for sublist in series for item in sublist)
    return ','.join(all_vals)

def pair_unique_sorted_join(series):
    # Pair字段直接去重排序拼接
    return ','.join(sorted(series.unique()))

# 分组聚合,用**语法明确映射字段
out = df.groupby('Name').agg(
    **{
        'Unique Pair': ('Pair', pair_unique_sorted_join),
        'Unique List 1 Item': ('List 1', unique_sorted_join),
        'All List 1 Item': ('List 1', all_sorted_join),
        'Unique List 2 Item': ('List 2', unique_sorted_join),
        'All List 2 Item': ('List 2', all_sorted_join)
    }
).reset_index()

3. 预期输出结果

# 最终输出与预期一致
print(out)
# 预期输出结构:
out_expected = pd.DataFrame({
    'Name': ['A','B'],
    'Unique Pair': ['b,c,d,e','b,d,f,g'],
    'Unique List 1 Item': ['1,2,3,4,5','1,2,3,4,5,6'],
    'All List 1 Item': ['1,2,2,3,4,5','1,2,3,3,4,5,6'],
    'Unique List 2 Item': ['1,2,3,4,5','1,3,4,5,6'],
    'All List 2 Item': ['1,2,3,3,3,4,4,5','1,1,3,3,4,5,6']
})

性能说明

  • 全程使用Pandas底层优化的矢量化操作,避免Python层面的逐行循环
  • groupby.agg批量处理分组,比逐组apply效率提升数倍
  • 拆分与过滤操作均为轻量逻辑,适合超大规模数据处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:25:18