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

如何指定pandas直方图坐标轴 按列分组统计Count绘制4个分布直方图

问题原因

df.hist() 方法的作用是绘制单列数值的频率分布直方图,默认统计每个数值在该列中的出现频次,不支持直接指定分组维度与聚合计算逻辑。你传入的Col_A、Col_B等都是分类文本列,pandas无法直接对文本列绘制数值分布,因此最终只会返回唯一的数值列Count的分布结果。
另外你要实现的是分类维度对应Count求和值的对比,本质是分类柱状图,和统计频率的直方图逻辑不同,用柱状图更贴合需求。

实现代码

首先导入依赖库:

import pandas as pd
import matplotlib.pyplot as plt

示例数据构造(你可以跳过这步直接用自己的df2):

data = {
    'Col_A': ['Apples', 'Oranges', 'Pears'],
    'Col_B': ['England', 'Scotland', 'Wales'],
    'Col_C': ['Red', 'Orange', 'Green'],
    'Count': [10, 20, 30]
}
df2 = pd.DataFrame(data)

绘图逻辑:

# 创建2行2列的画布承载4个图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))

# 1. Col_A唯一值对应Count求和结果
df2.groupby('Col_A')['Count'].sum().plot(
    kind='bar', 
    ax=axes[0,0], 
    title='Col_A维度Count总和',
    xlabel='Col_A取值',
    ylabel='Count求和结果'
)

# 2. Col_B唯一值对应Count求和结果
df2.groupby('Col_B')['Count'].sum().plot(
    kind='bar', 
    ax=axes[0,1], 
    title='Col_B维度Count总和',
    xlabel='Col_B取值',
    ylabel='Count求和结果'
)

# 3. Col_C唯一值对应Count求和结果
df2.groupby('Col_C')['Count'].sum().plot(
    kind='bar', 
    ax=axes[1,0], 
    title='Col_C维度Count总和',
    xlabel='Col_C取值',
    ylabel='Count求和结果'
)

# 4. Col_A+Col_B+Col_C组合对应Count求和结果
df2.groupby(['Col_A', 'Col_B', 'Col_C'])['Count'].sum().plot(
    kind='bar', 
    ax=axes[1,1], 
    title='三列组合维度Count总和',
    xlabel='三列取值组合',
    ylabel='Count求和结果'
)

# 调整布局避免标签重叠
plt.tight_layout()
plt.show()
补充说明

如果确实需要绘制求和后Count值的频率直方图,只需要把plot(kind='bar')替换为hist()即可,此时X轴为Count的数值区间,Y轴为落在该区间的维度数量,示例:

df2.groupby('Col_A')['Count'].sum().hist(ax=axes[0,0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:30:04