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

如何用循环高效实现按列拆分Pandas DataFrame并做词频统计?

用循环简化Pandas谷物推文词频统计代码

原始数据与手动实现代码

首先是包含谷物推文的DataFrame定义:

import pandas as pd
df = pd.DataFrame([['Cheerios', 'I love Cheerios they are the best'], ['FrostedFlakes', 'Frosted Flakes taste delicious'], ['FruityPebbles', 'Fruity Pebbles is a terrible cereal'], ['Cheerios', 'Honey Nut Cheerios are the greatest cereal'], ['FrostedFlakes', 'Frosted Flakes are grrrreat'], ['FruityPebbles', 'Fruity Pebbles are terrible']], columns=['Label', 'Tweet'])

当前手动实现的重复代码:

# 按Label拆分DataFrame
cereals0 = df[df["Label"] == 'Cheerios']
cereals1 = df[df["Label"] == 'FrostedFlakes']
cereals2 = df[df["Label"] == 'FruityPebbles']

# 拆分文本、统计词频并重置索引
cereals0 = cereals0.Tweet.str.split(expand=True).stack().value_counts().reset_index()
cereals1 = cereals1.Tweet.str.split(expand=True).stack().value_counts().reset_index()
cereals2 = cereals2.Tweet.str.split(expand=True).stack().value_counts().reset_index()

# 重命名列
cereals0.columns = ['Word', 'Frequency']
cereals1.columns = ['Word', 'Frequency'] 
cereals2.columns = ['Word', 'Frequency']

问题分析

你尝试的循环代码没有得到预期结果,原因是:循环内的变量cereal只是临时覆盖,没有持久化存储每次循环的结果,循环结束后只会保留最后一次循环的处理结果,之前的都会被丢弃。

正确循环实现方案

可以用字典来存储每个谷物对应的词频统计结果,键为谷物名称,值为处理后的DataFrame:

# 创建空字典存储结果
cereal_word_counts = {}

# 遍历所有唯一的谷物Label
for cereal_name in df.Label.unique():
    # 筛选对应Label的数据,处理词频统计
    temp_df = df[df["Label"] == cereal_name].Tweet.str.split(expand=True).stack().value_counts().reset_index()
    # 重命名列
    temp_df.columns = ['Word', 'Frequency']
    # 将结果存入字典
    cereal_word_counts[cereal_name] = temp_df

之后可以通过字典键访问对应谷物的词频统计结果,比如:

# 查看Cheerios的词频
print(cereal_word_counts['Cheerios'])
# 查看FrostedFlakes的词频
print(cereal_word_counts['FrostedFlakes'])

更高效的Pandas分组实现(可选)

除了循环,还可以用Pandas的groupby直接实现分组统计,代码更简洁:

# 分组后统一处理
result = df.groupby('Label')['Tweet'].apply(
    lambda x: x.str.split(expand=True).stack().value_counts().reset_index(name='Frequency')
).rename(columns={'index': 'Word'}).reset_index()

这个结果是一个包含所有谷物词频的单DataFrame,其中Label列对应谷物名称,Word和Frequency分别为词和频次。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:34