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

如何按id统计对应Sentiment的出现频率并添加至DataFrame

解决按ID分组统计Sentiment出现频率的问题

你的核心需求是按每个id分组,统计该id下对应Sentiment值的出现次数,但之前的代码都是全局统计Sentiment的频次,没有结合id分组,所以结果不符合预期。

正确解决方案

使用groupby同时按id和Sentiment分组,再用transform将计数结果映射回原DataFrame的每一行:

import pandas as pd
from pandas import DataFrame

# 你的示例数据
data = {'id': ['205', '205', '204', '204', '204'], 
        'First_name': ['Jon','Bill','Maria','Emma', 'Bee'], 
        'Sentiment': ['Positive', 'Positive', 'Neutral', 'Positive', 'Positve']}
df = DataFrame(data)

# 生成sent_freq列
df['sent_freq'] = df.groupby(['id', 'Sentiment'])['id'].transform('count')

运行后得到的结果:

id First_name Sentiment  sent_freq
0  205        Jon  Positive          2
1  205       Bill  Positive          2
2  204       Maria   Neutral          1
3  204        Emma  Positive          1
4  204         Bee   Positve          1

(注:你提供的"正确结果"中id204的Positive和Positve频次为2,应该是把Positve当成了Positive的拼写错误,若需要修正拼写后统计,可以先执行df['Sentiment'] = df['Sentiment'].replace('Positve', 'Positive')再运行上述代码)

错误原因分析

  • 你尝试的第一个循环代码:每次都全局计算Sentiment.value_counts(),得到的是整个数据集里每种Sentiment的总次数,而非按id分组的次数。
  • 第二个代码:仅按Sentiment分组统计id数量,同样是全局统计,没有结合id维度拆分。

另一种实现方式(merge法)

先计算分组计数,再合并回原DataFrame:

# 计算每个id+Sentiment组合的频次
counts = df.groupby(['id', 'Sentiment']).size().reset_index(name='sent_freq')
# 合并到原数据
df = df.merge(counts, on=['id', 'Sentiment'], how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:42:22