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

如何在Pandas中实现类VLOOKUP功能:基于列匹配生成新列值

用Python实现类似Excel VLOOKUP的匹配赋值需求

需求:当analysis_sheet的GPN列值存在于whitelist_sheet的GPN列时,将whitelist_sheet对应行的SOURCE列值写入analysis_sheet的RCL列。

尝试过的无效代码及问题

  • 代码1:
analysis_sheet['RCL'] = analysis_sheet['GPN'].isin(whitelist_sheet['GPN'])

仅返回布尔值(True/False),无法获取对应的SOURCE列内容。

  • 代码2:
analysis_sheet['RCL'] = ((analysis_sheet['GPN'].loc[analysis_sheet['GPN'].isin(whitelist_sheet['GPN']), analysis_sheet['RCL']]) = whitelist_sheet['SOURCE'])

存在语法错误,赋值语句不能嵌套在表达式中,且直接赋值整列SOURCE会导致索引不匹配。

  • 代码3:
analysis_sheet['RCL'] = analysis_sheet.merge(whitelist_sheet, right_on='SOURCE')

merge会返回完整的合并DataFrame,无法直接赋值给单个列,且匹配键错误(应使用GPN而非SOURCE)。

  • 代码4:
analysis_sheet['RCL'] = analysis_sheet.loc[analysis_sheet['GPN'].isin(whitelist_sheet['GPN']), whitelist_sheet['SOURCE']]

两个DataFrame的索引不匹配,无法完成对应位置的赋值。

正确实现方法

方法1:字典映射+map(高效简洁)

先构建GPN到SOURCE的映射关系,再批量匹配赋值:

# 生成GPN与SOURCE的映射字典
gpn_source_map = whitelist_sheet.set_index('GPN')['SOURCE'].to_dict()
# 匹配赋值,不存在的GPN会填充NaN
analysis_sheet['RCL'] = analysis_sheet['GPN'].map(gpn_source_map)

方法2:左连接合并(保留原表结构)

通过merge左连接合并两表,提取对应列赋值:

# 仅保留需要的列进行左连接,避免冗余数据
merged_data = analysis_sheet.merge(whitelist_sheet[['GPN', 'SOURCE']], on='GPN', how='left')
# 将合并后的SOURCE列赋值给RCL
analysis_sheet['RCL'] = merged_data['SOURCE']

方法3:loc筛选+replace(适合小型数据集)

# 初始化RCL列为空值
analysis_sheet['RCL'] = pd.NA
# 筛选出匹配GPN的行,替换为对应SOURCE值
match_rows = analysis_sheet['GPN'].isin(whitelist_sheet['GPN'])
analysis_sheet.loc[match_rows, 'RCL'] = analysis_sheet.loc[match_rows, 'GPN'].replace(gpn_source_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:05:21