如何在Python中基于条件替换DataFrame列A的不匹配值
实现步骤
首先把df2转换成4位字符到A列值的映射字典,提升匹配效率:
# 将df2转为映射字典,键是4位字符,值是对应的A列唯一值 mapping = df2.set_index('4 digits')[0].to_dict()
接着从df1的B列提取中间4位字符(和你之前生成布尔列c的切片逻辑保持一致):
# 示例格式为A-xxxx-xxx,所以取第2到第6位字符,根据实际数据格式调整slice参数 df1['B_4digits'] = df1['B'].str.slice(start=2, stop=6)
最后定位c列为False的行,用映射字典替换对应A列的值:
# 仅对c为False的行替换A列值,若匹配不到4位字符则保留原A值(可选) df1.loc[~df1['c'], 'A'] = df1.loc[~df1['c'], 'B_4digits'].map(mapping).fillna(df1['A']) # 若能确保所有B列的4位字符都能在df2找到匹配,可简化为: # df1.loc[~df1['c'], 'A'] = df1.loc[~df1['c'], 'B_4digits'].map(mapping)
效果验证
用你提供的示例数据测试后,df1第二行的A列会从A-0012-Alex替换为A-0085-John,完全符合需求。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

