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

如何以向量化(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:55