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

如何高效利用Pandas行值对另一DataFrame执行str.count统计?

高效实现统计词汇在df_new中出现次数的方法

你当前的for循环方法虽能实现需求,但数据量较大时效率偏低。可以通过先统计df_new的词频,再与final做关联的方式实现无循环的高效计算,具体方案如下:

核心思路

  1. 对df_new的Job列执行与final相同的拆分、展开操作,统计每个词汇的出现次数
  2. 将统计结果与final做左连接,直接匹配每个词汇在df_new中的出现次数,未匹配到的词汇补0

代码实现

import pandas as pd
import re

# 原构造final和df_new的代码保持不变
data = ['mechanical@engineer plays with machines','field engineer works with oil pumps','lab_scientist trains a rat that plays the banjo','doctor kills patients',
        'computer-engineer creates killing AI','scientist/engineer publishes nothing']
df = pd.DataFrame(data, columns=['Job'])
final = df['Job'].str.split().explode().value_counts().reset_index()
final.columns = ['words', 'number']

new_data = ['mechanical@engineer plays with machines while learning mechanics','field engineer works with oil pumps and gas cylinders','lab_scientist trains a rat',
             'doctor kills all','computer-engineer creates a conscious AI','scientist/engineer publishes something']
df_new = pd.DataFrame(new_data, columns=['Job'])

# 高效统计并关联的核心代码
# 1. 生成df_new的词汇频次表
df_new_word_counts = df_new['Job'].str.split().explode().value_counts().reset_index()
df_new_word_counts.columns = ['words', 'new_col']

# 2. 与final左连接,补全缺失值为0
final = final.merge(df_new_word_counts, on='words', how='left').fillna(0)
# 转成整数类型(可选,匹配频次的整数属性)
final['new_col'] = final['new_col'].astype(int)

print(final.head())

原代码的错误修正

你当前的循环代码里存在一处逻辑错误:foo = df.Job.str.count(keyword_pattern).sum() 应该使用df_new.Job而非df.Job,否则统计的是原df中的词汇次数,而非目标df_new的。

效率优势说明

这种方法利用pandas的向量化操作与合并能力,避免了逐行循环的开销。在数据量较大时(比如上万条Job记录),底层基于C实现的批量处理速度会远高于Python层面的逐行循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:42:39