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

如何根据另一DataFrame的ID映射批量重命名pandas列

pandas批量替换ID类列名实现方案

不需要手动编写重命名字典,直接通过df2自动生成映射规则即可,全流程可复用,适配任意数量的sector映射场景。

实现步骤

  1. 从df2生成ID值到真实名称的查找映射
    直接基于df2的两列生成字典,替代手动录入的映射关系:

    # 构建id -> 真实名称的查找表
    id_name_map = dict(zip(df2["id"], df2["real names"]))
    
  2. 自动识别df1中的ID类列,生成重命名规则
    遍历df1所有列,自动匹配id+数字格式的ID列,跳过randomcol这类非ID列,仅对存在有效映射的ID列生成重命名对应关系:

    rename_dict = {}
    for col in df1.columns:
        # 判定是否为id开头+数字后缀的ID类列
        if col.startswith("id") and col[2:].isdigit():
            current_id = int(col[2:])
            # 仅保留df2中存在对应名称的ID映射
            if current_id in id_name_map:
                rename_dict[col] = id_name_map[current_id]
    
  3. 执行重命名
    和手动传字典的调用方式完全一致:

    df1_renamed = df1.rename(columns=rename_dict, errors="raise")
    

简洁写法(字典推导式版本)

如果偏好更短的代码,可以直接用字典推导式一次性生成重命名规则:

id_name_map = dict(zip(df2["id"], df2["real names"]))
rename_dict = {
    col: id_name_map[int(col[2:])]
    for col in df1.columns
    if col.startswith("id") 
    and col[2:].isdigit() 
    and int(col[2:]) in id_name_map
}
df1_renamed = df1.rename(columns=rename_dict)

可选校验逻辑

如果需要严格校验是否有ID列缺失对应名称,可以加一段检查逻辑提前抛出异常,避免漏匹配:

# 提取所有ID类列
all_id_cols = [col for col in df1.columns if col.startswith("id") and col[2:].isdigit()]
# 找出没有对应名称的ID
missing_match = [int(col[2:]) for col in all_id_cols if int(col[2:]) not in id_name_map]
if missing_match:
    raise ValueError(f"以下ID未在df2中匹配到对应真实名称:{missing_match}")

方案优势

  • 自动保留非ID类列,不需要额外配置过滤规则
  • 只要df2中维护全ID和真实名称的映射关系,不管涉及多少个sector,代码都可以直接复用,不需要手动修改映射字典
  • 默认不会因为存在未匹配的ID列触发报错,也可以通过可选校验逻辑实现严格匹配

内容的提问来源于stack exchange,提问作者Rafael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:27:17