You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:36:04