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

如何在Python中利用另一DataFrame生成的高频词计算目标列

解决高频词对应商品Days_Sold总和计算问题

问题概述

你手里有一份记录商品描述和销售天数的DataFrame,已经通过collections.Counter统计出描述列里的高频词并存在count DataFrame中,现在需要自动计算每个高频词对应的所有含该词商品的Days_Sold总和,还要能支持处理3000+行数据、40+个高频词的场景,没法手动逐个处理。

简洁高效的解决方案

这里给你一套更直接的实现逻辑,避开复杂嵌套循环,完美适配你的需求:

import pandas as pd
from collections import Counter
import numpy as np

# 初始化原始DataFrame
cup = {'Description': ['strawberry cupcake', 'blueberry cupcake', 'strawberry cookie', 'grape organic cookie', 'blueberry organic cookie', 'lemon organic cupcake'], 'Days_Sold': [3, 4, 1, 2, 2, 1]}
cake = pd.DataFrame(data=cup)

# 自定义高频词数量:通过most_common(n)里的n值调整,比如取前40个就写40
word_counts = Counter(" ".join(cake['Description']).split()).most_common(40)
count = pd.DataFrame(word_counts, columns=['Words', 'Values'])
count.index = np.arange(1, len(count)+1)

# 核心计算:给每个高频词匹配对应商品的Days_Sold总和
result = count.copy()
result['Total_Days_Sold'] = result['Words'].apply(
    lambda word: cake[cake['Description'].str.contains(word, case=False)]['Days_Sold'].sum()
)

# 查看最终结果
print(result)

代码细节说明

  • 自定义高频词数量:在Counter(...).most_common(n)里修改n的值,就能精准获取你需要的前n个高频词,轻松应对40+的需求。
  • 匹配逻辑:用str.contains()检查商品描述是否包含目标高频词,case=False保证大小写不干扰匹配(不需要的话可以去掉),再对匹配到的行的Days_Sold求和。
  • 效率适配:利用Pandas的矢量化操作替代嵌套循环,处理3000+行数据时速度更快,也更易维护。

你之前代码的问题分析

你尝试的嵌套循环报'int' object is not iterable错误,主要问题出在:

  • for day in cake遍历的是DataFrame的列名(也就是Description和Days_Sold),不是行数据,后续赋值操作把循环变量搞混了。
  • for top in count同样是遍历列名,top= count.Words这行根本没正确获取每个高频词,反而覆盖了循环变量,导致后续匹配逻辑完全错位。

关于你更新方案的优化建议

你后来调整的方案也能实现需求,但可以再简化:拆分描述列后合并的逻辑,其实用上面的apply+str.contains方式更直接,代码量更少,执行效率也更高。

内容的提问来源于stack exchange,提问作者Kitty.Cattie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:12:46