如何基于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
相关产品推荐
相关产品推荐

