如何提取两个同名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
相关产品推荐
相关产品推荐

