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

如何对含分隔符的列执行Pandas合并(类似Vlookup)?

解决Pandas合并含多值单元格的问题

问题分析

原代码直接用merge无法匹配的核心原因是:df2的PDs列存在分号分隔的多值字符串,而df1的PDs均为单个值,两者无法直接匹配。必须先将df2的多值PDs拆分为单独行,再执行合并操作。

解决方案

先拆分df2中PDs列的多值并展开为多行(保留对应Number),再与df1做合并:

import pandas as pd

# 读取Excel数据
df1 = pd.read_excel('df1.xlsx')
df2 = pd.read_excel('df2.xlsx')

# 处理df2:拆分多值PDs并展开为多行,同时清理空格
df2_processed = df2.assign(PDs=df2['PDs'].str.split(';')).explode('PDs')
df2_processed['PDs'] = df2_processed['PDs'].str.strip()

# 执行合并
dfmerge = df1.merge(df2_processed[['Number', 'PDs']], on='PDs')

代码说明

  • df2['PDs'].str.split(';'):把每个PDs单元格的字符串按分号拆分为列表(比如"9045;4729;5392"会变成['9045', '4729', '5392'])。
  • .explode('PDs'):将列表中的每个元素单独展开为一行,原行的Number会对应每个拆分后的PDs值。
  • .str.strip():去除PDs值前后的空格,避免因单元格内的空格(比如"9045; 4729")导致匹配失败。
  • 最后用处理后的df2子集与df1合并,即可实现单个PDs值和多值拆分后的匹配。

示例验证

针对你给出的df2示例数据:

rowPDs
02345
12675
28706
39045;4729;5392
43452

处理后df2_processed的PDs列会变为:

PDsNumber
2345原行对应Number
2675原行对应Number
8706原行对应Number
9045原行3对应Number
4729原行3对应Number
5392原行3对应Number
3452原行对应Number

此时再与df1合并,就能正确匹配所有PDs值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:09