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

pandas基于另一DataFrame匹配结果新增列,现有实现如何优化

现有实现的效率问题

你目前的实现不是最高效的,主要存在两个性能缺陷:

  • 逐行apply是Python级别的循环,无法利用pandas底层的向量化优化,数据量过万后性能会急剧下降
  • 每次循环都要把data2["KEY"]转为列表再做in判断,列表的成员查询时间复杂度为O(n),且重复生成列表会带来额外开销,data2数据量越大性能损耗越明显
更优实现方案

推荐使用pandas自带的向量化判断操作,性能可以提升几十到上百倍(随数据量增大优势更明显):

import pandas as pd

d1 = {"KEY": ["KEY1", "KEY2", "KEY3"], "value1": ["ABC",[] , []], "value2": ["abc", "XYZ",[] ]}
data1 = pd.DataFrame(d1)

d2 =  {"KEY": ["KEY2"]}
data2 = pd.DataFrame(d2)

# 提前将data2的KEY转为集合,实现O(1)时间复杂度的成员查询
d2_key_set = set(data2["KEY"])
# 向量化赋值:符合条件取value2,否则取value1
data1["value"] = data1["value2"].where(data1["KEY"].isin(d2_key_set), data1["value1"])

如果更习惯np.where的写法也可以替换,效果完全一致:

import numpy as np
data1["value"] = np.where(data1["KEY"].isin(d2_key_set), data1["value2"], data1["value1"])

内容的提问来源于stack exchange,提问作者Mr.Hedge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:03