如何根据字典列表匹配ID替换Pandas列中的值
匹配IDCUST替换NAMECITY.1列值的解决方案
输入数据
字典列表
dict_list = [ {'idcust': '123', 'LOC_NAME_STATE': 'BRUNSWICK_WA'}, {'idcust': '124', 'LOC_NAME_STATE': 'CANNING VALE_WA'} ]
原始Pandas DataFrame
import pandas as pd df = pd.DataFrame({ 'IDCUST': ['123', '124', '125'], 'NAMECITY.1': ['RICHMOND', 'MACLEAY ISLAND', 'VICTORIA POINT'] })
实现方法
方法1:映射字典+map替换
先把字典列表转成{idcust: 对应替换值}的映射关系,再用map匹配替换,匹配不到的用fillna保留原值:
# 构建映射字典 mapping = {item['idcust']: item['LOC_NAME_STATE'] for item in dict_list} # 执行替换 df['NAMECITY.1'] = df['IDCUST'].map(mapping).fillna(df['NAMECITY.1'])
替换后结果:
IDCUST NAMECITY.1 0 123 BRUNSWICK_WA 1 124 CANNING VALE_WA 2 125 VICTORIA POINT
方法2:直接用replace替换
replace方法支持按列映射替换,写法更简洁:
df['NAMECITY.1'] = df['IDCUST'].replace(mapping)
效果和方法1完全一致,未匹配的行会自动保留原有值。
方法3:合并DataFrame更新
如果需要处理更复杂的字段关联,可以先把字典列表转成临时DataFrame,再通过合并来更新:
# 字典列表转临时DataFrame dict_df = pd.DataFrame(dict_list) # 左连接原DataFrame和临时DataFrame merged_df = df.merge(dict_df, left_on='IDCUST', right_on='idcust', how='left') # 替换NAMECITY.1列,填充未匹配的原值 merged_df['NAMECITY.1'] = merged_df['LOC_NAME_STATE'].fillna(merged_df['NAMECITY.1']) # 删除多余的中间列 merged_df = merged_df.drop(['idcust', 'LOC_NAME_STATE'], axis=1)
内容的提问来源于stack exchange,提问作者Kamila Ambro
相关产品推荐
相关产品推荐

