如何以向量化(Pandas风格)方式按映射替换DataFrame列值?
向量化实现Pandas列映射替换
当然有更符合Pandas风格的向量化实现方式,以下是几种高效写法:
方法1:使用assign()配合字典推导
通过字典推导一次性生成所有需要替换的列映射,再用assign()批量更新,全程为向量化操作:
import pandas as pd df = pd.DataFrame({ "A1": [1, 11, 111], "A2": [2, 22, 222], "A3": [3, 33, 333], "A4": [4, 44, 444], "A5": [5, 55, 555] }) mapping = { "A1": ["A2", "A3"], "A4": ["A5"] } # 构建替换列的键值对:目标列 -> 源列数据 replace_mapping = {col: df[k] for k, cols in mapping.items() for col in cols} # 批量更新DataFrame df = df.assign(**replace_mapping)
执行后结果:
A1 A2 A3 A4 A5 0 1 1 1 4 4 1 11 11 11 44 44 2 111 111 111 444 444
方法2:简化版批量列赋值
利用Pandas的广播机制,直接给多列赋值,无需内层循环,本质也是向量化操作:
for k, cols in mapping.items(): df[cols] = df[k]
这种写法比原两层循环更简洁,df[k]作为Series赋值给多个列时,Pandas会自动将其广播到对应列的形状,内部用C级别的向量化运算完成,性能远优于Python层面的循环。
方法3:使用loc显式指定列范围
如果需要更明确的索引控制,可通过loc批量选择列并赋值:
for k, cols in mapping.items(): df.loc[:, cols] = df[k].values[:, None]
这里df[k].values[:, None]将一维数组转为二维确保形状匹配,不过Pandas通常会自动处理广播,这一步也可以省略。
内容的提问来源于stack exchange,提问作者Milos Stojanovic
相关产品推荐
相关产品推荐

