如何统计列值制作堆叠条形图?解决count列全为NaN问题
解决方案
你之前的代码出现全NaN是因为df['Detail'].value_counts()统计的是全表范围内每个Detail值的总次数,它的索引是Detail的不同取值,和原DataFrame的索引完全不匹配,直接赋值时大部分位置找不到对应值,自然会填充NaN。
要实现按Main分组统计各Detail的数量并制作堆叠条形图,正确步骤如下:
- 分组统计每个Main下各Detail的出现次数
用groupby同时按Main和Detail分组,统计每组的行数(即对应数量):
# 分组计数并重置索引为常规DataFrame count_df = df.groupby(['Main', 'Detail']).size().reset_index(name='count')
- 重塑数据为堆叠条形图所需格式
把数据转换成以Main为行索引、Detail为列、count为值的结构,缺失值填充0(避免某个Main下没有的Detail出现空缺):
stacked_data = count_df.pivot(index='Main', columns='Detail', values='count').fillna(0)
- 绘制堆叠条形图
直接调用pandas的绘图方法生成堆叠条形图:
stacked_data.plot(kind='bar', stacked=True, figsize=(10,6))
如果需要自定义图表样式,可补充参数调整:
ax = stacked_data.plot(kind='bar', stacked=True, figsize=(10,6)) ax.set_title('各Main分类下Detail的分布') ax.set_xlabel('Main分类') ax.set_ylabel('数量') ax.legend(title='Detail分类')
内容的提问来源于stack exchange,提问作者ShazelP
相关产品推荐
相关产品推荐

