Python Dataframe如何基于结构特殊的关联表将ID替换为对应名称
解决方案
方案1:先重构DataFrame2(推荐)
该方案将结构特殊的DataFrame2转换为通用的ID-名称映射字典,一次处理可复用,逻辑清晰且执行效率高,适合数据量较大、后续还有其他属性读取需求的场景。
import pandas as pd import numpy as np # 1. 提取所有名称列,生成ID-名称映射表 name_columns = [col for col in df2.columns if col.endswith('.name')] id_name_map = {} for col in name_columns: # 拆分列名提取物品ID item_id = int(col.split('.')[0]) # 取该列第一个非空值作为物品名称,有多行值的话按需调整取值逻辑 item_name = df2[col].dropna().iloc[0] id_name_map[item_id] = item_name # 2. 批量替换DataFrame1中item0~item5列的ID为名称 target_cols = [f'item{i}' for i in range(6)] df1[target_cols] = df1[target_cols].replace(id_name_map)
方案2:不重构DataFrame2,直接动态映射
如果不需要复用映射关系、数据量较小,可直接通过调用函数的方式动态匹配取值,无需改动DataFrame2的原有结构。
target_cols = [f'item{i}' for i in range(6)] def convert_id_to_name(item_id): target_col = f'{item_id}.name' if target_col in df2.columns: return df2[target_col].dropna().iloc[0] # 匹配不到时返回原ID,也可修改为自定义默认值 return item_id df1[target_cols] = df1[target_cols].applymap(convert_id_to_name)
注意事项
- 若DataFrame2的
<itemid>.name列存在多组有效值,可根据业务需求调整取值逻辑,例如取出现频次最高的值、指定行取值等 - 匹配不到对应名称的物品ID会默认保留原值,也可修改返回逻辑设置为
np.nan、未知物品等自定义占位值
内容的提问来源于stack exchange,提问作者Trollme Rito
相关产品推荐
相关产品推荐

