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

Pandas:不使用groupby/apply将分组转为JSON列表(大数据优化)

优化百万级DataFrame分组转JSON列表的方案

针对300万+行的DataFrame,原groupby+apply方案因逐组Python循环导致效率极低,可通过以下两种更高效的方式实现需求:

方法一:先转每行字典再分组聚合列表

这种方式将逐行处理替代逐组处理,利用groupby.agg的矢量化聚合能力提升速度:

# 1. 将目标列转为每行的字典,生成临时列
item_df['temp_dict'] = item_df[["BarCode", "Description", "Category", "Code", "Quantity", "Price"]].apply(lambda x: x.to_dict(), axis=1)

# 2. 按分组键聚合字典列表,生成结果
result = item_df.groupby(['BarCode_x', 'Extracted_Code', 'Unique_Code_x'])['temp_dict'].agg(list).reset_index(name='Grouped')

# 可选:删除临时列
item_df.drop('temp_dict', axis=1, inplace=True)

方法二:优化groupby聚合逻辑

如果不想生成临时列,可直接对分组后的列使用列表推导替代to_dict("records"),减少组级循环开销:

result = item_df.groupby(['BarCode_x', 'Extracted_Code', 'Unique_Code_x'])[["BarCode", "Description", "Category", "Code", "Quantity", "Price"]].agg(
    lambda x: [row.to_dict() for _, row in x.iterrows()]
).reset_index(name='Grouped')

性能提升原理

原方案中groupby.apply(lambda group: group.to_dict("records"))会对每个分组单独调用to_dict,涉及大量组级别的Python循环;优化后的方案要么先完成逐行字典转换(一次循环)再做矢量化聚合,要么用更轻量的列表推导替代全组转字典操作,大幅减少了Python层面的循环开销,通常能将处理时间从小时级压缩到分钟级。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:27:09