Pandas条件列填充:'PERS CODE'为空时用'PERS2 CODE'映射名称
解决方案
完整修改代码
import pandas as pd df_name = pd.DataFrame({'CODE':['01','02','03','04'], 'NAME':['MICK','DAVID','JEAN','CHERRY']}) df_exp = pd.DataFrame({'TEST':['POST1','POST2','POST3','POST4','POST5','POST6','POST7', 'POST8'], 'PERS CODE':['02','','','04','','02','','03'], 'PERS2 CODE':['03','01','02','01','04','02','01','05']}) # 预先生成CODE到NAME的映射字典,复用更高效 name_mapping = df_name.set_index('CODE')['NAME'] df_output = pd.DataFrame() df_output['POST'] = df_exp['TEST'] # 优先用PERS CODE映射,空值则用PERS2 CODE映射填充 df_output['AGENT'] = df_exp['PERS CODE'].map(name_mapping).fillna(df_exp['PERS2 CODE'].map(name_mapping)) print(df_output)
关键逻辑说明
- 先构建
name_mapping字典,将df_name的CODE设为索引对应NAME值,避免重复计算。 - 第一步用
PERS CODE映射得到AGENT初始值,PERS CODE为空的行此时会得到NaN。 - 调用
fillna方法,把AGENT中的空值替换为PERS2 CODE映射后的结果,实现"优先用PERS CODE,空值则用PERS2 CODE"的需求。 - 若
PERS2 CODE的值在df_name中无匹配(比如POST8的05),对应AGENT会保留NaN,符合数据实际情况。
内容的提问来源于stack exchange,提问作者FBAB
相关产品推荐
相关产品推荐

