如何基于模糊匹配的多值分隔符键连接两个DataFrame
发布时间 - 2026-01-30 00:00:00 点击率:次本文介绍在pandas中实现“一对多”式条件连接的方法:当df2的dest列以斜杠分隔多个值(如"a/b/c")时,将df1中(org, dest)与df2中org相同且dest为该字符串中任一子项的记录进行左连接。
在实际数据处理中,常遇到连接键不完全一致但存在逻辑包含关系的情况——例如,df2中的 dest 字段存储的是用 / 分隔的多个目标值(如 "A/B/C"),而 df1 中的 dest 是单一值(如 "B")。此时标准的 merge 无法直接匹配,需先对 df2 的 dest 列进行结构化解析,再执行常规连接。
核心思路是:
- 将 df2['dest'] 按 '/' 拆分为列表;
- 使用 .explode() 将每个列表展开为多行(一行变多行),使复合键扁平化;
- 基于标准化后的 (org, dest) 对两表执行 left merge。
✅ 完整实现代码如下:
import pandas as pd
# 构造示例数据
df1 = pd.DataFrame({
'Name': ['Ashok', 'Rahul', 'Anupa', 'Sam'],
'org': ['A', 'A', 'B', 'A'],
'dest': ['B', 'C', 'A', 'B']
})
df2 = pd.DataFrame({
'org': ['A', 'B', 'A'],
'dest': ['A/B/C', 'C', 'W'],
'Amount': [10, 20, 30]
})
# 关键步骤:拆分 + 展开 + 连接
df2_exploded = df2.assign(dest=df2['dest'].str.split('/')).explode
('dest')
df3 = df1.merge(df2_exploded, on=['org', 'dest'], how='left')
print(df3)输出结果:
Name org dest Amount 0 Ashok A B 10.0 1 Rahul A C 10.0 2 Anupa B A NaN 3 Sam A B 10.0
⚠️ 注意事项:
- str.split('/') 默认返回 list,若某 dest 值不含 /(如 "C" 或 "W"),会生成单元素列表(['C']),explode 仍能正确处理;
- 若 dest 含空值(NaN),str.split() 会返回 NaN,explode 会保留该行但 dest 为 NaN,可能导致连接失败,建议提前用 df2 = df2.dropna(subset=['dest']) 清洗;
- 若需严格匹配原始预期输出中 "Rahul" 行 Amount 为空(即不填充 10),说明业务逻辑要求仅匹配 df2 中 org 和 dest 同时精确对应的记录(如 "A" → "A/B/C" 仅当 dest='A' 才匹配),本方案已满足;但注意 "Rahul" 实际应匹配到 df2 第一行(org='A', dest='A/B/C' → 展开后含 'C'),因此 Amount=10 是正确的——若业务要求不同,请进一步明确匹配优先级(如正则、前缀匹配等)。
该方法简洁高效,适用于中等规模数据;对于超大规模数据,可考虑使用 pd.concat + map 或预构建映射字典优化性能。
# pandas
# 字符串
# map
# 多个
# 的是
# 适用于
# 数据处理
# 不含
# 请进
# 不完全
# 仍能
# 为空
# 正确处理
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
EditPlus中的正则表达式 实战(4)
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
如何用wdcp快速搭建高效网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何基于云服务器快速搭建网站及云盘系统?
高防服务器如何保障网站安全无虞?
黑客如何通过漏洞一步步攻陷网站服务器?
图册素材网站设计制作软件,图册的导出方式有几种?
想要更高端的建设网站,这些原则一定要坚持!
如何确保西部建站助手FTP传输的安全性?
教你用AI将一段旋律扩展成一首完整的曲子
如何挑选优质建站一级代理提升网站排名?
LinuxCD持续部署教程_自动发布与回滚机制
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何快速完成中国万网建站详细流程?
免费网站制作appp,免费制作app哪个平台好?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何快速上传建站程序避免常见错误?
简单实现jsp分页
高性价比服务器租赁——企业级配置与24小时运维服务
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
如何获取免费开源的自助建站系统源码?
网站优化排名时,需要考虑哪些问题呢?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
魔毅自助建站系统:模板定制与SEO优化一键生成指南
iOS中将个别页面强制横屏其他页面竖屏
Linux安全能力提升路径_长期防护思维说明【指导】
文字头像制作网站推荐软件,醒图能自动配文字吗?
奇安信“盘古石”团队突破 iOS 26.1 提权
网站制作软件免费下载安装,有哪些免费下载的软件网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
教学论文网站制作软件有哪些,写论文用什么软件
?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
如何在万网ECS上快速搭建专属网站?


