如何用Python跨列查找含相同词汇的单元格并生成第三列
解决方案:跨列查找含相同词汇的单元格
不需要将DataFrame转换为numpy数组,用pandas自带的工具就能实现跨列匹配需求。以下是完整实现代码:
import pandas as pd import numpy as np # 定义提取词汇集合的函数:处理字符串拆分(含连字符),非字符串直接返回自身集合 def get_terms(s): if isinstance(s, str): # 先按路径分隔符拆分,再拆分连字符,提取所有词汇片段 parts = s.split('/') terms = set() for part in parts: sub_parts = part.split('-') terms.update(sub_parts) return terms else: return {s} # 示例数据 details = { 'Column1': ['site.com/auto-new/car', 2, 30, 0], 'Column2': ['site.com/auto/car', 1 , 25, 3] } df = pd.DataFrame(details) # 预计算Column2所有值的词汇集合,避免重复计算提升效率 col2_terms = df['Column2'].apply(get_terms).to_dict() # 定义匹配函数:对每个Column1的单元格,在Column2中找有共同词汇的项 def find_matching_values(row): terms_col1 = get_terms(row['Column1']) matches = [] # 遍历Column2的所有值和对应的词汇集合 for val_col2, terms_col2 in col2_terms.items(): # 检查两个词汇集合是否有交集(即存在相同词汇) if not terms_col1.isdisjoint(terms_col2): matches.append(val_col2) # 返回匹配结果,无匹配则返回NaN return ', '.join(map(str, matches)) if matches else np.nan # 生成NEW列 df['NEW'] = df.apply(find_matching_values, axis=1) print(df)
代码说明:
get_terms函数:统一处理字符串和非字符串类型的数据,将内容转换为词汇集合,方便后续交集判断。对于路径类字符串,会拆分路径分隔符和连字符,提取所有独立词汇片段。- 预计算
col2_terms:提前把Column2所有值的词汇集合存起来,避免在每行匹配时重复计算,提升运行效率。 find_matching_values函数:逐行处理Column1的内容,和Column2所有值的词汇集合做交集判断,收集所有匹配的Column2值,最后用逗号分隔返回,无匹配则返回NaN。
运行后输出结果:
Column1 Column2 NEW 0 site.com/auto-new/car site.com/auto/car site.com/auto/car 1 2 1 NaN 2 30 25 NaN 3 0 3 NaN
如果需要调整匹配规则(比如只匹配完全相同的词汇、或者只返回第一个匹配项),可以修改get_terms或find_matching_values函数的逻辑即可。
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

