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

基于Pandas GroupBy绘制段落情感统计柱状图的实现问题求助

解决DataFrame情感标签柱状图绘制问题

我来帮你搞定这个柱状图的问题!你的核心需求是按每个original_data(段落)统计不同情感标签的数量,然后用柱状图展示对吧?之前的代码没达到效果,是因为没有先对情感标签的数量做统计,直接分组plot是行不通的,咱们一步步来:

步骤1:先做数据聚合统计

首先得把每个段落里的Anger和Sadness数量统计出来,用groupby结合size()来计数,再用unstack()把情感标签转成列,方便后续绘图:

import pandas as pd
import matplotlib.pyplot as plt

# 你的示例数据
d = {'text': ["aaa", "aaa", "bbb", "aaa", "bbb", "bbb"], 'start': [0, 1, 0, 2, 1, 0], 'end': [250, 500, 501, 251, 249, 499], 'label': ["anger", "sadness", "sadness", "sadness", "anger", "anger"], 'annotator': [0,1,1,1,0,0], 'original_data': ["aaaaaa", "bbbbbb", "aaaaaa", "bbbbbb", "aaaaaa", "bbbbbb"], 'speaker': ["Achiles", "Hektor", "Achiles", "Achiles", "Hektor", "Hektor"], 'rounded_length': [110, 250, 250, 110, 110, 250]}
df = pd.DataFrame(data=d)

# 按original_data和label分组,统计每组的条目数
count_df = df.groupby(['original_data', 'label']).size().unstack(fill_value=0)

运行这段代码后,count_df会变成清晰的统计结构:

original_dataangersadness
aaaaaa21
bbbbbb12

步骤2:绘制柱状图

现在直接用plot.bar()就能生成你要的柱状图,每个段落对应Anger和Sadness两个柱子:

# 绘制柱状图
count_df.plot(kind='bar', figsize=(8, 6), rot=0)

# 添加图表装饰,让结果更直观
plt.title('Emotion Count per Original Paragraph', fontsize=12)
plt.xlabel('Original Paragraph', fontsize=10)
plt.ylabel('Number of Entries', fontsize=10)
plt.legend(title='Emotion Label', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()

为什么之前的代码不行?

你之前的groupby(['original_data', 'rounded_length']).plot(y='label', x='rounded_length')存在两个核心问题:

  • 分组维度不对:你要的是按original_data和label统计数量,而不是rounded_length
  • 直接plot分类变量:label是字符串类型的分类变量,不能直接作为y轴绘制,必须先统计每个类别的数量

这样调整后就能完美实现你要的效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:27:29