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

Pandas统计DataFrame消息列中idf权重>0的单词数量

问题背景

现有两个pandas DataFrame:

  • 名为idf的权重表,存储特征词对应的idf权重,数据如下:
feature_name idf_weights
2488    kralendijk  11.221923
3059    night       0
1383    ebebf       0
  • 名为df的消息表,存储文本消息及每条消息的总词数,数据如下:
message                   Number of Words in each message  
0   night kralendijk ebebf          3 

需求为df新增一列,统计每条message中对应idf权重值大于0的单词数量,预期输出如下:

message                   Number of Words in each message   Number of words with idf_score>0
0   night kralendijk ebebf                 3                     1

原有代码问题

原有实现代码如下,运行后统计结果为总词数,不符合预期:

words_weights = dict(idf[['feature_name', 'idf_weights']].values)
df['> zero'] = df['message'].apply(lambda x: count([words_weights.get(word, 11.221923) for word in x.split()]))

错误原因:

  • 代码中直接用count统计拆分后所有单词的数量,没有添加「权重大于0」的筛选条件
  • 列表推导式仅生成了所有单词对应的权重值,没有做阈值判断,因此计数结果等于总词数

正确实现方案

修正逻辑:拆分消息为单词列表后,逐个匹配对应idf权重,仅统计权重值大于0的单词个数,代码如下:

# 构建特征词到idf权重的映射字典
words_weights = dict(zip(idf['feature_name'], idf['idf_weights']))

# 统计idf权重>0的单词数量,若单词不在权重表中默认权重为0(可根据业务需求调整默认值)
df['Number of words with idf_score>0'] = df['message'].apply(
    lambda x: sum(1 for word in x.split() if words_weights.get(word, 0) > 0)
)

运行上述代码即可得到预期输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:16