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

Pandas dataframe按日期分组应用自定义函数生成词频统计新表方案

解决方案

第一步:优化process_title方法

原有方法中使用try-except包裹remove操作存在两个缺陷:一是只能删除首个匹配的目标词,若文本中多次出现google/search/-会有残留;二是笼统捕获所有异常容易隐藏其他未知错误。优化后采用列表过滤逻辑,稳定性更强:

from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from nltk.corpus import stopwords
import pandas as pd

stop_words = set(stopwords.words('english'))
lemmatizer = WordNetLemmatizer()

def process_title(text):
    tokens = word_tokenize(text.lower())
    # 直接过滤不需要的词汇,替代原有remove逻辑
    filter_tokens = [w for w in tokens if w not in {'google', 'search', '-'}]
    lemm_tokens = list(map(lemmatizer.lemmatize, filter_tokens))
    # 额外加长度校验,过滤掉空字符串
    without_stop = [word for word in lemm_tokens if word not in stop_words and len(word.strip())>0]
    return without_stop

第二步:生成目标DataFrame

# 1. 对每个标题做预处理,得到处理后的单词列表
df_org['processed_words'] = df_org['Titles'].apply(process_title)

# 2. 拆分单词列表为单行单个单词,保留对应日期
df_explode = df_org.explode('processed_words').rename(columns={'processed_words': 'Word'})

# 3. 过滤空值,避免无效统计
df_explode = df_explode.dropna(subset=['Word'])

# 4. 按日期+单词分组统计频次,整理为要求的结构
result_df = df_explode.groupby(['Dates', 'Word'], as_index=False)\
                      .size()\
                      .rename(columns={'size': 'Frequency', 'Dates': 'Date'})

# 5. 调整列顺序为要求的[Word, Frequency, Date]
result_df = result_df[['Word', 'Frequency', 'Date']]

逻辑说明

  • 先通过apply批量处理所有标题,得到每个标题对应的清洗后单词列表
  • 用explode方法将列表型的单词列拆分为多行,每个单词单独占一行,同时保留该标题对应的日期
  • 过滤空值后按日期和单词两个维度分组,统计每个分组的行数即为该单词在对应日期的出现频次
  • 最后调整列名和列顺序,得到符合要求的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:48:03