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

如何基于Lookup Table匹配AccountId与MappedField重命名Pandas列

基于Lookup Table按AccountId匹配重命名DataFrame列

核心实现思路

通过筛选Lookup Table中当前数据对应的AccountId规则,构建原始列名到目标列名的映射字典,再利用pandas的rename()方法完成列名替换。以下是针对单AccountId和多AccountId场景的具体实现:


样例数据准备

先构造符合需求的测试数据:

import pandas as pd

# 原始业务数据
raw_df = pd.DataFrame({
    'AccountId': ['A001', 'A001', 'A002', 'A002'],
    'CustName': ['张三', '李四', '王五', '赵六'],
    'Amt': [100, 200, 300, 400],
    'TransDate': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04']
})

# 列名映射规则表(Lookup Table)
lookup_table = pd.DataFrame({
    'AccountId': ['A001', 'A001', 'A002', 'A002'],
    'MappedField': ['CustName', 'Amt', 'CustName', 'Amt'],
    'FieldName': ['客户姓名', '交易金额', '用户名称', '交易额度']
})

场景1:原始数据仅对应单个AccountId

如果原始数据中所有行属于同一个AccountId,直接筛选对应规则并构建映射:

# 获取当前数据的AccountId
current_account = raw_df['AccountId'].iloc[0]

# 筛选该AccountId对应的列名映射规则
account_rules = lookup_table[lookup_table['AccountId'] == current_account]

# 构建原始列名→目标列名的映射字典
rename_mapping = dict(zip(account_rules['MappedField'], account_rules['FieldName']))

# 执行重命名(未匹配的列名保持不变)
renamed_df = raw_df.rename(columns=rename_mapping)

# 查看结果
print(renamed_df)

输出结果:

AccountId 客户姓名  交易金额   TransDate
0      A001    张三   100  2024-01-01
1      A001    李四   200  2024-01-02
2      A002    王五   300  2024-01-03
3      A002    赵六   400  2024-01-04

场景2:原始数据包含多个AccountId

如果数据中存在多个AccountId,需要按AccountId分组后分别应用对应规则:

def rename_group(group):
    # 获取当前分组的AccountId
    account_id = group['AccountId'].iloc[0]
    # 筛选对应规则
    rules = lookup_table[lookup_table['AccountId'] == account_id]
    # 构建映射字典
    mapping = dict(zip(rules['MappedField'], rules['FieldName']))
    # 重命名当前分组的列
    return group.rename(columns=mapping)

# 按AccountId分组处理,再合并结果
final_df = raw_df.groupby('AccountId', group_keys=False).apply(rename_group)

# 查看结果
print(final_df)

输出结果:

AccountId 用户名称  交易额度   TransDate
0      A001    张三   100  2024-01-01
1      A001    李四   200  2024-01-02
2      A002    王五   300  2024-01-03
3      A002    赵六   400  2024-01-04

注意事项

  • 确保Lookup Table中(AccountId, MappedField)组合唯一,避免重复映射导致规则冲突
  • 原始数据中未出现在对应AccountId的MappedField中的列,将保留原列名
  • 若需要强制重命名所有列,需提前在Lookup Table中补充对应规则,或在代码中添加未匹配列的处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:00:10