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

如何优化Pandas从多DataFrame构建数组新列的大数据量处理代码

原代码的核心问题在于逐活动循环合并,每处理一个活动就给Leads表新增一列,当活动数量较多时会导致DataFrame列数爆炸,且iterrows迭代、多次merge操作都会大幅提升内存占用和计算耗时,完全不适合大数据量场景。

优化方案

仅通过两次关联+一次分组聚合即可完成需求,全程使用pandas原生向量化操作,内存占用低、执行效率高,逻辑如下:

  1. 先关联Campaigns和Campaign Members表,拿到每个LeadId对应的活动名称
  2. 按LeadId分组,将同一用户的所有活动名称聚合为列表
  3. 将聚合结果左关联到Leads表,未匹配到活动的用户填充为空列表

实现代码:

import pandas as pd

# 关联活动表和活动成员表,拿到每个线索对应的活动名
lead_campaign_rel = campaign_members.merge(
    campaigns[["Id", "Name"]],
    left_on="CampaignId",
    right_on="Id",
    how="left"
)[["LeadId", "Name"]]

# 按线索ID分组,聚合活动名称为列表
lead_campaign_agg = lead_campaign_rel.groupby("LeadId")["Name"].agg(list).reset_index()

# 左关联到线索表
leads_df = leads_df.merge(
    lead_campaign_agg,
    left_on="Id",
    right_on="LeadId",
    how="left"
).drop(columns="LeadId").rename(columns={"Name": "Campaigns"})

# 未参加任何活动的线索填充为空列表
leads_df["Campaigns"] = leads_df["Campaigns"].apply(lambda x: x if isinstance(x, list) else [])

性能优势

优化后的代码无需循环遍历活动,也不会生成大量冗余的中间列,内存占用仅和原始3张表的总数据量正相关,哪怕是百万级的线索、活动、成员数据也可以正常执行。如果数据量特别大,还可以直接将pandas替换为dask等并行计算框架,逻辑完全兼容无需修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:05