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

如何提取两个同名Name列的公共词汇生成Intersection新列

解决方案

你之前用merge类函数没得到预期结果,本质是函数场景不匹配:merge用于跨表关联匹配,而你的需求是同DataFrame内逐行计算两个文本列的公共词汇,不需要做表连接操作。
另外要注意:pandas读取存在同名列的CSV时,会自动将重名列重命名为Name、Name.1,不少人写逻辑时没注意到自动重命名,会出现取数列报错、结果不符合预期的问题。


可直接运行的实现代码

import pandas as pd

# 读入本地csv文件
df = pd.read_csv("你的output.csv本地路径")

# 定义逐行取公共词汇的逻辑
def extract_common(row):
    # 将两个字段的文本按空格拆分为词集合,自动去重
    word_set1 = set(str(row["Name"]).split())
    word_set2 = set(str(row["Name.1"]).split())
    # 取两个集合的交集,拼接为字符串
    return " ".join(word_set1 & word_set2)

# 生成目标Intersection列
df["Intersection"] = df.apply(extract_common, axis=1)

# 若需要保留原两个列的Name命名,执行下行代码即可
# df.columns = ["Name", "Name", "Intersection"]

适配调整说明

  • 若需要忽略大小写匹配公共词,把转集合的逻辑改为set(str(row["Name"]).lower().split())即可,两个字段统一做小写转换后再匹配
  • 若需要保留词汇在原文本中的出现顺序,不要用集合(集合本身无序),替换为有序匹配逻辑:
    def extract_common_ordered(row):
        word_list1 = str(row["Name"]).split()
        word_set2 = set(str(row["Name.1"]).split())
        common_words = [word for word in word_list1 if word in word_set2]
        return " ".join(common_words)
    
  • 无公共词汇的行,Intersection列默认返回空字符串,可根据业务需求自行替换默认值
  • 若文本拆分规则不是空格(比如存在连字符、标点需要先清洗),在split()前增加对应文本清洗逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:19:01