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

如何匹配两个DataFrame列字符串并填充对应标准名称?

解决方案:Pandas实现别名匹配并填充标准名称

核心思路

先把DF2中逗号分隔的别名拆分成单独行,构建「别名-标准名」的映射关系,再用这个映射去匹配DF1的名称列完成填充。这种矢量化操作比循环高效得多,还能避免循环中容易出现的细节错误(比如空格处理、匹配逻辑漏洞)。

完整代码示例

1. 构造测试数据

import pandas as pd

# 示例DF1:待填充的数据集
df1 = pd.DataFrame({
    'DF1_NAME': ['Slau', 'London', 'Paris', 'Moscow', 'Berlin']
})

# 示例DF2:包含别名和对应标准名的数据集
df2 = pd.DataFrame({
    'DF2_ALT_NAME': ['Slau,Slough,Слау', 'London,Londres', 'Paris,Париж', 'Москва,Moscow'],
    'DF2_Standard_NAME': ['Slough', 'London', 'Paris', 'Moscow']
})

2. 处理DF2:拆分别名并构建映射

# 将逗号分隔的别名拆分为列表,再展开成多行
df2_exploded = df2.assign(DF2_ALT_NAME=df2['DF2_ALT_NAME'].str.split(',')).explode('DF2_ALT_NAME')
# 去除别名前后可能存在的空格(适配数据有空格的情况)
df2_exploded['DF2_ALT_NAME'] = df2_exploded['DF2_ALT_NAME'].str.strip()

3. 两种填充方式任选其一

方式一:字典映射(简洁高效)
# 生成「别名→标准名」的字典
name_map = df2_exploded.set_index('DF2_ALT_NAME')['DF2_Standard_NAME'].to_dict()
# 填充DF1的目标列
df1['DF1_STANDARD_NAME'] = df1['DF1_NAME'].map(name_map)
方式二:左连接(适合需保留更多DF2字段的场景)
# 左连接DF1和处理后的DF2,仅匹配名称一致的行
df1 = df1.merge(
    df2_exploded,
    left_on='DF1_NAME',
    right_on='DF2_ALT_NAME',
    how='left'
)
# 重命名列并清理冗余字段
df1 = df1.rename(columns={'DF2_Standard_NAME': 'DF1_STANDARD_NAME'}).drop(columns='DF2_ALT_NAME')

效果验证

运行后DF1的结果:

DF1_NAMEDF1_STANDARD_NAME
SlauSlough
LondonLondon
ParisParis
MoscowMoscow
BerlinNaN

(注:未匹配到的行会显示NaN,可按需用fillna填充默认值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:42:09