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

在Pandas中关联两个DataFrame,用参考表替换列值或新增标识列

高效解决DataFrame区域映射问题(适配10万+行大表)

针对你这种大数量级的映射需求,我推荐两种性能优异、代码简洁的方案,完全适配10万+行的场景,还能应对实际数据中更复杂的结构:

方案1:使用merge合并(适配多场景,稳妥可靠)

如果你的参考表ref包含额外字段,或者存在一对多的映射关系,merge是最稳妥的选择——pandas对大表的merge操作做了深度优化,10万+行数据处理几乎瞬间完成。

代码示例:

import pandas as pd

# 补全示例主表df(假设Region列完整)
df = pd.DataFrame({
    'Date': ['1/1/11','1/2/11','1/2/11','1/2/11','1/3/11','1/3/11','1/3/11','1/3/11','1/4/11','1/5/11','1/5/11','1/5/11'],
    'Prod': ['Quad','Bellen','Quad','Bellen','Sunshine','Carlota','Sunset','Sunshine','Sunset','Sunset','Sunshine','Carlota'],
    'Region': ['North', 'South', 'East', 'North', 'West', 'South', 'East', 'West', 'North', 'South', 'East', 'West']
})

# 示例参考表ref(Place表)
ref = pd.DataFrame({
    'Region': ['North', 'South', 'East', 'West'],
    'Code': ['N01', 'S02', 'E03', 'W04']
})

# 方式A:新增Code列,保留原Region列
df_with_code = pd.merge(df, ref, on='Region', how='left')

# 方式B:直接替换Region列为Code(无需保留原字段时用)
df_replaced = pd.merge(df, ref, on='Region', how='left').drop('Region', axis=1).rename(columns={'Code': 'Region'})

核心细节:

  • 用how='left'确保主表所有行都被保留,即使某些Region在ref中无匹配值(会返回NaN,方便后续统一处理)
  • 若ref中存在重复的Region值,merge会自动展开为多对一的结果,适合复杂映射场景

方案2:使用map映射(一对一映射首选,性能更优)

如果你的ref是严格的一对一映射(一个Region对应唯一Code),map是更轻量的选择——时间复杂度为O(n),性能比merge略胜一筹,代码也更简洁。

代码示例:

# 先把ref转成字典:Region为键,Code为值
region_to_code = ref.set_index('Region')['Code'].to_dict()

# 方式A:新增Code列
df['Code'] = df['Region'].map(region_to_code)

# 方式B:直接替换原Region列
df['Region'] = df['Region'].map(region_to_code)

核心细节:

  • 转字典是关键操作,能让map的映射效率最大化
  • 若存在无匹配的Region,map会返回NaN,可通过fillna统一填充,比如:df['Region'].map(region_to_code).fillna('UNKNOWN')

针对复杂值结构的预处理建议

你提到实际数据的值结构更复杂(比如拼写差异、大小写不一致、含特殊字符),可以先做预处理:

  • 统一格式:df['Region'] = df['Region'].str.strip().str.upper(),同时对ref的Region列执行相同操作
  • 处理模糊匹配:如果存在近似匹配(比如"North"和"North_"),可先用df['Region'].isin(ref['Region'])筛选出不匹配的行,再用fuzzywuzzy库做针对性匹配,避免全量模糊匹配拖慢速度
  • 提前处理空值:df['Region'].fillna('UNKNOWN', inplace=True),避免映射后出现NaN

内容的提问来源于stack exchange,提问作者S.Gu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:30:53