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

如何基于DataFrame的ColA值选择不同字典映射ColB列?

条件映射ColB列的最优实现方案

刚好碰到过类似的需求,针对你这个按ColA的值选择不同字典映射ColB的场景,我推荐两种高效的实现方式,其中第一种是性能最优的:

方法1:布尔索引 + 向量化map操作(首选)

这种方法利用Pandas的向量化特性,避免逐行循环,处理大数据集时速度优势非常明显:

import pandas as pd
import numpy as np

# 构造你的原始DataFrame
df = pd.DataFrame({
    'ColA': [1, 2, 2, 1, 1, 2],
    'ColB': [1, 3, 2, 2, 3, 1]
})

d1 = {1:'a', 2:'b', 3:'c'}
d2 = {1:'d', 2:'e', 3:'f'}

# 核心操作:用np.where做条件判断,分别映射
df['ColB'] = np.where(df['ColA'] == 1, df['ColB'].map(d1), df['ColB'].map(d2))

原理说明

  • np.where(condition, x, y)会遍历每一行,当满足df['ColA'] == 1时,使用df['ColB'].map(d1)的结果,否则使用df['ColB'].map(d2)的结果
  • map是Pandas的向量化方法,比逐行处理效率高得多

方法2:apply逐行处理(直观但性能稍弱)

如果你的数据集很小,追求代码直观性,可以用apply逐行判断,但大数据集下不推荐:

df['ColB'] = df.apply(
    lambda row: d1[row['ColB']] if row['ColA'] == 1 else d2[row['ColB']],
    axis=1
)

最终结果

两种方法都会得到你想要的输出:

ColA ColB
0     1    a
1     2    f
2     2    e
3     1    b
4     1    c
5     2    d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:29:26