统计df1各行业关键词与df2网站内容列表的匹配单词数量
实现方案(Python Pandas 版本)
以下代码可直接运行得到你要的输出结果:
import pandas as pd import ast # ---------------------- 示例数据构造 ---------------------- # 如果你是从csv/excel读取数据,可跳过这部分,直接用你自己的df1、df2 df1 = pd.DataFrame({ 'Sector': ['Education', 'Finance'], 'Content': [['school', 'children', 'learning', 'enrichment'], ['banks', 'insurance', 'moneylender']] }) df2 = pd.DataFrame({ 'Company Name': ['ABC', 'DEF'], 'Website Info': [['school', 'enrichment'], ['banks', 'children', 'school']] }) # --------------------------------------------------------- # 如果读取数据时列表字段被识别为字符串,需要先执行以下转换代码 # df1['Content'] = df1['Content'].apply(ast.literal_eval) # df2['Website Info'] = df2['Website Info'].apply(ast.literal_eval) # 1. 把行业关键词转为【行业名: 关键词集合】的映射,集合查询效率远高于列表 sector_kw_map = { sector: set(kw_list) for sector, kw_list in zip(df1['Sector'], df1['Content']) } # 2. 逐行业统计df2每行内容的匹配单词数 for sector, kw_set in sector_kw_map.items(): # 按要求生成列名 col_name = f'No. of Matched Words {sector}' # 取两个集合的交集长度,即为匹配单词数量 df2[col_name] = df2['Website Info'].apply(lambda info: len(set(info) & kw_set)) # 输出结果 print(df2)
逻辑说明
- 用集合存储关键词是为了提升查询效率,数据量级大的时候性能优势会非常明显
- 代码支持动态适配df1的行业扩展,后续新增行业不需要修改统计逻辑,会自动生成对应匹配数字段
- 如果需要统计非去重的匹配次数(比如某关键词在Website Info里出现2次算2次),可以把统计逻辑替换为:
df2[col_name] = df2['Website Info'].apply(lambda info: sum(1 for word in info if word in kw_set))
内容的提问来源于stack exchange,提问作者fearon
相关产品推荐
相关产品推荐

