如何在 Pandas 中按元素交集合并两列字符串
技术百科
花韻仙語
发布时间:2026-01-01
浏览: 次 本文介绍如何将 dataframe 中两列以逗号分隔的字符串进行逐行元素级交集运算,并生成新列;支持空交集时返回 `pd.na`,代码简洁高效,适用于文本标签、关键词匹配等场景。
在实际数据处理中,我们常遇到两列存储了用逗号分隔的标签、技能、品类等字符串(如 "#%#$#%@%@%$#%$#%#%#$%@_23eeeb4347bdd26bfc++6b7ee9a3b755dd, java, c++"),需要提取它们的共同元素作为新特征。Pandas 本身不直接支持字符串集合运算,但可通过 Python 原生 set 与列表推导式高效实现。
以下为完整操作步骤:
✅ 步骤一:构建示例数据
import pandas as pd
data = {
'Col1': ["apple, banana, orange", "dog, cat", "python, java, c++"],
'Col2': ["banana, lemon, blueberry", "bird, cat", "R, fortran"]
}
df = pd.DataFrame(data)✅ 步骤二:计算元素交集并生成 Col3
核心逻辑是:对每行的 Col1 和 Col2 字符串分别
① 用 .split(', ') 拆分为列表;
② 转为 set 类型以支持交集运算(&);
③ 将交集结果用 ', '.join() 合并回字符串;
④ 若交集为空,显式赋值为 pd.NA(推荐做法,保持缺失值语义清晰)。
df['Col3'] = [
', '.join(set(a.split(', ')) & set(b.split(', '))) or pd.NA
for a, b in zip(df['Col1'], df['Col2'])
]? 说明:or pd.NA 是简洁写法,等价于三元表达式 x if x else pd.NA。它确保空字符串(即无交集)被替换为 pd.NA,而非空字符串 "",从而正确参与后续 isna() 判断、统计或可视化。
✅ 输出效果
| Col1 | Col2 | Col3 |
|---|---|---|
| apple, banana, orange | banana, lemon, blueberry | banana |
| dog, cat | bird, cat | cat |
| python, java, c++ | R, fortran |
⚠️ 注意事项
-
空格敏感:split(', ') 要求逗号后紧跟一个空格。若原始数据格式不统一(如 "apple,banana" 或 "apple , cat"),建议先标准化:
df['Col1'] = df['Col1'].str.replace(r'\s*,\s*', ', ',
regex=True).str.strip() -
大小写处理:如需忽略大小写,可在转 set 前统一小写:
set(a.lower().split(', ')) & set(b.lower().split(', ')) - 性能提示:对于超大数据集(百万行以上),可改用 apply + lambda 并启用 vectorize=False,或考虑 swifter 加速;但列表推导式在多数场景下已足够快且内存友好。
该方法轻量、可读性强,无需额外依赖,是 Pandas 文本集合运算的经典实践方案。
# 大数据
# python
# app
# java
# c++
# apple
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10电脑C盘红了怎么清理_Windows10
- Windows10蓝屏代码DPC_WATCHDOG
- 如何优化Golang Web性能_Golang H
- Windows 11登录时提示“用户配置文件服务登
- 如何用::实现单例模式_php静态方法与作用域操作
- 如何使用正则表达式批量替换重复的“-”模式为固定字
- 如何使用Golang实现文件追加操作_向已有文件追
- php删除数据怎么加限制_带where条件删除避免
- VSC怎么在PHP中调试MySQL_数据库交互排查
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- c++ atoi和atof函数用法_c++字符数组
- C++友元类使用场景_C++类间协作设计方式讲解
- php本地部署后session无法保存_sessi
- Python代码测试策略_质量保障解析【教程】
- C#如何使用XPathNavigator高效查询X
- 短链接怎么自定义还原php_修改解码规则适配需求【
- php怎么捕获异常_trycatch结构处理运行时
- 如何使用Golang log设置日志输出格式_Go
- php本地部署后数据库连接报错_1045acces
- Mac如何将HEIC图片格式转为JPG_Mac批量
- Windows11怎么自定义任务栏_Windows
- XML的“混合内容”是什么 怎么用DTD或XSD定
- 如何在Golang中处理模块包路径变化_Golan
- Win11局域网共享怎么设置 Win11文件夹网络
- Win11麦克风没声音怎么设置_Win11麦克风权
- Linux怎么修改用户密码_Linux系统pass
- Mac如何整理桌面文件_Mac使用堆栈功能一键整理
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- C++如何将C风格字符串(char*)转换为std
- php订单日志怎么记录评价_php记录订单评价日志
- php内存溢出怎么排查_php内存限制调试与优化方
- Win11输入法选字框不见了怎么办_Win11输入
- Go 中 defer 在 goroutine 内部
- php增删改查在php8里有什么变化_新特性对cu
- Linux如何使用grep搜索文件内容_Linux
- php订单日志怎么按状态筛选_php筛选不同状态订
- Windows10电脑怎么设置自动连接WiFi_W
- Python与Docker容器化部署实战_镜像构建
- Win11如何连接Xbox手柄 Win11蓝牙连接
- Win11截图快捷键是什么_Win11自带截图工具
- LINUX的SELinux是什么_详解LINUX强
- Win11怎么开启游戏工具栏_Windows11
- 如何在 Go 中创建包含映射(map)的切片(sl
- Win10如何卸载WindowsDefender_
- 如何在 Go 中比较自定义的数组类型(如 [20]
- Windows10如何更改鼠标图标_Win10鼠标
- Win11怎么设置夜间模式_Windows11显示
- Win11怎么打开旧版计算器_Win11恢复传统计
- php转mp4怎么保留字幕_php处理带字幕视频转

regex=True).str.strip()
QQ客服