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

如何加速Pandas中双层for循环实现的DataFrame列值替换?

高效实现DataFrame列值匹配替换的方法

你的双层for循环逻辑虽然能运行,但时间复杂度是O(n*m),数据量越大速度越慢。用pandas的矢量化操作可以直接解决这个问题,效率提升几个数量级,下面是两种常用的高效方案:

方法一:利用字典映射(map)

先把DataFrame b转换成「匹配键-目标值」的字典,再用map方法批量替换,不匹配的项可以保留原值:

import pandas as pd

# 示例数据
a = pd.DataFrame({'a': ['a','b','c','d','e','f','g', 'h', 'i']}) 
b = pd.DataFrame({'a': ['a','b','c','d','e','f','g'], 'b': ['alpha', 'alpha', 'alpha', 'beta', 'beta', 'charlie', 'charlie']})

# 从b生成映射字典:键是a列值,值是对应的b列值
mapping_dict = b.set_index('a')['b'].to_dict()

# 执行替换,未匹配的项用fillna保留原内容
a['a'] = a['a'].map(mapping_dict).fillna(a['a'])

print(a)

输出结果:

a
0     alpha
1     alpha
2     alpha
3      beta
4      beta
5  charlie
6  charlie
7        h
8        i

方法二:左连接合并(merge)

通过左连接把两个DataFrame关联,再合并列值实现替换:

import pandas as pd

# 示例数据
a = pd.DataFrame({'a': ['a','b','c','d','e','f','g', 'h', 'i']}) 
b = pd.DataFrame({'a': ['a','b','c','d','e','f','g'], 'b': ['alpha', 'alpha', 'alpha', 'beta', 'beta', 'charlie', 'charlie']})

# 按a列左连接,保留a的所有行
merged_df = a.merge(b, on='a', how='left')

# 替换逻辑:有匹配的b列值就用,无匹配的保留原a列值
a['a'] = merged_df['b'].fillna(merged_df['a'])

print(a)

为什么这两种方法更快?

pandas的矢量化操作底层基于C实现,避免了Python层面的循环开销,处理十万甚至百万级数据时,速度会比双层循环快几十到上百倍。

另外你的原代码存在额外性能问题:每次循环都调用replace修改整个列,会产生大量不必要的计算,完全可以通过批量操作一次性完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:20:27