You need to enable JavaScript to run this app. Pandas基于条件创建字典列:跨DataFrame按id匹配生成新列
优惠活动
大模型
产品
解决方案
定价
更多

Pandas基于条件创建字典列:跨DataFrame按id匹配生成新列

Pandas逐行生成字典列的高效实现

前置优化:构建O(1)查找映射

先对df_1做一次单向遍历,将id作为键、对应行的rank_dict作为值存入内存字典,避免后续逐行匹配时重复全表扫描df_1,把查找效率从线性复杂度降为常数级:

# 生成id与原始rank字典的映射关系
id_rank_lookup = dict(zip(df_1["id"], df_1["rank_dict"]))

逐行生成new_rank_dict列

编写适配Pandas行操作的处理函数,严格匹配业务规则:

def build_row_rank_dict(row):
    # 获取当前行id对应的df_1源字典,无匹配项时返回空字典避免报错
    source_rank_dict = id_rank_lookup.get(row["id"], {})
    # 以三个rank列的URL为键,存在则取源字典值,不存在赋值为0
    return {
        row["rank_1"]: source_rank_dict.get(row["rank_1"], 0),
        row["rank_2"]: source_rank_dict.get(row["rank_2"], 0),
        row["rank_3"]: source_rank_dict.get(row["rank_3"], 0)
    }

# 应用函数生成目标新列
df_2["new_rank_dict"] = df_2.apply(build_row_rank_dict, axis=1)

结果校验

代码运行完成后输出的df_2与预期结构完全一致:

  • id为2223的行生成字典为{www.yahoo.com:2, www.whatever.com:0, www.google.com:3}
  • id为1112的行生成字典为{www.gm.com:0, www.motor1.com:2, www.webull.com:1}

性能说明

常规数据规模(万行级)下,上述写法的运行效率完全满足需求,且逻辑清晰易维护。如果是百万行以上的超大体量数据集,可以将逐行apply替换为向量化匹配逻辑进一步压缩运行时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 01:06:10