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

Pandas高效统计:各关键词对应含该关键词的文章数量计算方法

嘿,我来给你分享个效率更高的办法!

你之前逐个用df.str.contains()的方式,本质上是循环每个关键词都要完整扫一遍10000篇文章,数据量大的时候会很慢。咱们可以换个思路,只扫一遍文章,一次性找出所有匹配的关键词,再统计每个关键词对应的文章数量,这样效率能提升不少。

具体步骤和代码如下:

第一步:导入必要的库

import pandas as pd
import re

第二步:准备你的示例数据

df1=pd.DataFrame(['apple','mac','pc','ios','lg'],columns=['keywords'])
df2=pd.DataFrame(['apple is good for health','mac is another pc','today is sunday','Star wars pc game','ios is a system,lg is not','lg is a japan company '],columns=['article'])

第三步:构建正则匹配模式

这里用\b是为了匹配完整的单词,避免把"app"误判成"apple";用re.escape是为了处理关键词里可能存在的正则特殊字符(比如.、*这类),确保匹配准确。

# 转义关键词中的特殊字符,构建正则模式
keywords = df1['keywords'].tolist()
pattern = r'\b(' + '|'.join(re.escape(k) for k in keywords) + r')\b'

第四步:提取每篇文章中匹配的关键词(去重)

用str.findall找出每篇文章里所有匹配的关键词,再转成集合去重(同一篇文章里同一个关键词出现多次只算一次):

# 找出每篇文章匹配的关键词,去重
article_matches = df2['article'].str.findall(pattern).apply(set)

第五步:统计每个关键词对应的文章数量

把集合展开,确保同一篇文章的同一个关键词只统计一次,最后用value_counts统计频次:

# 展开匹配结果并统计文章数量
keyword_counts = article_matches.explode().value_counts()

第六步:输出你想要的格式

for keyword, count in keyword_counts.items():
    print(f"{count}篇文章包含\"{keyword}\"")

运行这段代码后,输出结果就和你预期的完全一致:

2篇文章包含"lg"
2篇文章包含"pc"
1篇文章包含"apple"
1篇文章包含"mac"
1篇文章包含"ios"

(注:输出顺序可能会变,但数量完全准确;如果需要和df1的关键词顺序一致,可以再用df1去匹配keyword_counts调整顺序)

这个方法只需要遍历一次df2,相比逐个关键词循环的方式,在数据量大的时候(比如100个关键词+10000篇文章),效率会提升非常明显。

内容的提问来源于stack exchange,提问作者Andy Adam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:24:51