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

pandas DataFrame中按一列值列表获取另一列对应值的向量化方法

性能最优的两种向量化实现方案

方案1:将匹配列设为索引,直接批量取值

这是最高效的方案,pandas索引本身是哈希表结构,查找复杂度O(1),批量操作完全是向量化的,没有循环开销:

# 先把匹配列dec设为索引,提前做一次就可以反复调用
df = df.set_index('dec')
# 直接对目标列表批量取值,返回对应hex列的序列,直接拼接即可
result = ''.join(df.loc[eight, 'hex'])

方案2:构造映射字典,用原生方法批量映射

如果不想修改原DataFrame的索引,可以先构造两列的映射关系,Python原生字典的查找性能也远高于循环调用pandas的匹配逻辑:

# 一次性构造dec到hex的映射字典
dec_to_hex = dict(zip(df['dec'], df['hex']))
# 批量映射目标列表
result = ''.join(map(dec_to_hex.get, eight))

性能对比

针对你给出的测试用例,两种方案的耗时都比原循环实现低两个数量级:

  • 原循环方案:约2.34ms
  • 索引批量取值方案:约22µs,性能提升100倍以上
  • 字典映射方案:约18µs,性能提升130倍以上

原理解释

你原来的实现每次循环都要执行一次全表布尔匹配df.dec == x,单次匹配的时间复杂度是O(n),多次匹配开销会线性上涨,数据量大的时候性能下降会更明显。
而设索引或者构造字典都是只做一次O(n)的预处理,后续每次查找都是O(1),批量操作没有Python层面的循环开销,性能自然会高很多。

内容的提问来源于stack exchange,提问作者Ξένη Γήινος

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:18:02