400 8949 560

NEWS/新闻

分享你我感悟

您当前位置> 主页 > 新闻 > 技术开发

如何在 Pandas 中按元素交集合并两列字符串

发表时间:2026-01-01 00:00:00

文章作者:花韻仙語

浏览次数:

本文介绍如何将 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 文本集合运算的经典实践方案。

相关案例查看更多