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

Python Pandas绘制分组均值柱状图异常:仅显示A类,如何显示B类?

问题描述

我有一个需要可视化的Excel表格,结构包含ORP列(含a、b等类别值)和Produkce_obyv._kg列(数值),使用Python Pandas处理。现有代码先筛选ORP为'A'和'B'的分组,分别计算均值并合并到DataFrame后绘制柱状图,但图表仅显示A类柱子,B类不显示。用于统计分析的ttest_ind检验可正常运行,排查发现数据无缺失、分组数据正常,仍无法解决问题,求原因及解决方法。

可视化代码

group1 = data[data['ORP']=='A']  
group2 = data[data['ORP']=='B']

graf = group1.groupby('ORP')['Produkce_obyv._kg'].mean().to_frame(name='A')
graf['B'] = group2.groupby('ORP')['Produkce_obyv._kg'].mean()

graf.plot.bar()
plt.show()

统计代码

ttest_ind_result = ttest_ind(group1['Produkce_obyv._kg'], group2['Produkce_obyv._kg'], equal_var=False)
print(ttest_ind_result)

排查代码

print(graf.isna().sum())
print(len(group2))
print(group2['ORP'].unique())
原因分析

问题出在DataFrame的合并逻辑上:

  • group1.groupby('ORP')['Produkce_obyv._kg'].mean()生成的是索引为'A'的Series
  • group2.groupby('ORP')['Produkce_obyv._kg'].mean()生成的是索引为'B'的Series
  • 当给graf新增'B'列时,Pandas会按索引匹配值,但graf的索引只有'A',B的均值无法匹配到对应索引,最终导致'B'列没有有效数据(并非NaN,而是该值不在当前索引范围内),绘图时被自动忽略。
解决方法

方法1:一步式分组聚合(推荐)

无需拆分筛选再合并,直接按ORP分组筛选目标类别并计算均值,然后绘图:

# 筛选A、B类别并分组计算均值
graf = data[data['ORP'].isin(['A', 'B'])].groupby('ORP')['Produkce_obyv._kg'].mean()
# 绘制柱状图
graf.plot.bar()
plt.show()

方法2:提取标量值赋值

计算均值时直接提取数值(而非带索引的Series),再构建DataFrame:

group1 = data[data['ORP']=='A']  
group2 = data[data['ORP']=='B']

# 直接取均值的标量值,避免索引干扰
graf = pd.DataFrame({'A': [group1['Produkce_obyv._kg'].mean()]}, index=['均值'])
graf['B'] = group2['Produkce_obyv._kg'].mean()

graf.plot.bar()
plt.show()

方法3:重置索引后合并

将两个分组均值的Series重置索引,消除索引不匹配问题:

group1 = data[data['ORP']=='A']  
group2 = data[data['ORP']=='B']

# 重置索引,去掉ORP作为索引
group1_mean = group1.groupby('ORP')['Produkce_obyv._kg'].mean().reset_index(drop=True)
group2_mean = group2.groupby('ORP')['Produkce_obyv._kg'].mean().reset_index(drop=True)

# 合并为DataFrame
graf = pd.DataFrame({'A': group1_mean, 'B': group2_mean})
graf.plot.bar()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:50:27