如何在Pandas中用另一DataFrame的标准名称替换目标DataFrame的ID值
实现DataFrame中ID到标准名称的批量替换
核心思路
先把映射表转换成ID-标准名称的字典,再利用Pandas的replace()方法对目标DataFrame的所有列批量完成替换,无需逐列处理。
步骤1:构建匹配的映射字典
目标DataFrame里的ID是浮点数类型(如1000002.0),而映射表中的ID是整数,所以需要把字典的键转为浮点数,确保类型匹配:
# 从映射表生成字典,并转换键的类型为float id_mapping = df_IDs.set_index('Criteria ID')['Canonical Name'].to_dict() id_mapping = {float(k): v for k, v in id_mapping.items()}
步骤2:批量替换所有列
直接调用replace()方法传入映射字典,会自动遍历所有列完成替换,未在映射表中的ID会保留原值:
# 执行替换,生成新的DataFrame df_replaced = df.replace(id_mapping)
替换结果示例
替换后的df_replaced内容如下:
| LopCityCriteriaId | LopCountryCriteriaId | LopMostSpecificTargetId | LopRegionCriteriaId | |
|---|---|---|---|---|
| 0 | 1007788.0 | 2356.0 | 1007788.0 | 20462.0 |
| 1 | Kabul,Kabul,Afghanistan | Luanda,Luanda Province,Angola | Luanda,Luanda Province,Angola | Willemstad,Curacao |
| 2 | Luanda,Luanda Province,Angola | Kabul,Kabul,Afghanistan | 9062093.0 | Luanda,Luanda Province,Angola |
| 3 | Luanda,Luanda Province,Angola | Willemstad,Curacao | Kabul,Kabul,Afghanistan | Philipsburg,Sint Maarten |
| 4 | The Valley,Anguilla | The Valley,Anguilla | Kabul,Kabul,Afghanistan | The Valley,Anguilla |
额外说明
如果需要对未匹配的ID统一处理(比如替换为"未找到匹配名称"),可以修改替换逻辑:
# 先替换匹配项,再把剩余的数值类型转为指定文本 df_replaced = df.replace(id_mapping) for col in df_replaced.columns: df_replaced[col] = df_replaced[col].apply(lambda x: x if isinstance(x, str) else "未找到匹配名称")
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

