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

基于其他数据集的VLOOKUP实现Pandas指定列名批量修改

解决Pandas数据集列名替换为另一数据集对应值的问题

你需要把ee里除Product_Code之外的所有列名,替换成table4['Period']中的对应值(比如M20改2016/09、M53改2019/06),下面是具体的实现方案,我拆成步骤讲:

第一步:建立旧列名与新值的映射字典

首先得把旧列名(如M20这类标识)和table4里的Period值绑定成字典。这里假设table4里有一列存储旧列名(比如叫Column_Code),可以用这段代码生成映射:

# 以table4的Column_Code为键,Period为值生成映射字典
col_mapping = table4.set_index('Column_Code')['Period'].to_dict()

如果旧列名本身就是table4的索引,那更简单:

col_mapping = table4['Period'].to_dict()

第二步:批量替换ee的列名

用Pandas的rename()方法就能完成批量替换,推荐用lambda+get()的写法,这样能自动保留Product_Code的原名称,不用额外过滤:

# 有映射的列名替换成对应Period值,没有的(比如Product_Code)保持原样
ee = ee.rename(columns=lambda x: col_mapping.get(x, x))

如果你想更明确地指定只替换非Product_Code的列,也可以这么写:

# 筛选出需要替换的列(排除Product_Code)
cols_to_rename = [col for col in ee.columns if col != 'Product_Code']
# 创建替换字典
rename_dict = {col: col_mapping[col] for col in cols_to_rename}
# 执行列名替换
ee = ee.rename(columns=rename_dict)

实际场景示例

假设你的table4数据结构是这样的:

Column_CodePeriod
M202016/09
M532019/06
M102015/11

ee的原始列名是['Product_Code', 'M20', 'M53', 'M10'],运行代码后,ee的列名会变成['Product_Code', '2016/09', '2019/06', '2015/11'],完全匹配你的需求。

避坑提示

  • 要确保table4包含ee所有需要替换的列名,否则会触发KeyError。可以提前检查遗漏:
    missing_cols = [col for col in ee.columns if col != 'Product_Code' and col not in col_mapping]
    if missing_cols:
        print(f"注意:这些列名在table4中找不到对应Period值:{missing_cols}")
    
  • 如果table4的Period有重复值,替换后ee会出现重复列名,需要额外处理(比如给重复列加后缀)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:47:51