python - 基于 pandas 中的列的分层条形图

标签 python pandas bar-chart pandas-groupby

我有一个 4 列 6 行的 pandas 数据框。例如:

        Healthy    state_A   state_B  state_C
0:      Yes        0         1        1
1:      No         0         1        0
2:      Yes        0         0        1
3:      Yes        0         0        1
4:      No         0         0        0
5:      No         0         0        1

现在我想绘制一个条形图。每个状态列的总和应为一根柱(即,state_A 的总和应对应于一根柱,state_B 的总和应对应于一根柱,state_C 的总和应对应于一根柱)。此外,我想按“健康”列对它们进行分组,即每个条形图都应该分层。例如,state_C 条的高度为 4(总和为 4),它应该由两种颜色组成(一种颜色的高度为 3,因为我们有 3 个 Healty==Yes,另一种颜色的高度为 1,因为我们有一个 Healty==否)。

如何做到这一点?

最佳答案

不确定我是否正确理解了您的意思,但我会尝试。

示例数据:

(列顺序并不重要)

   A  B  C Healthy
0  0  1  1     Yes
1  0  1  0      No
2  0  0  1     Yes
3  0  0  1     Yes
4  0  0  0      No
5  0  0  1      No

图表:

import pandas as pd


data = {'Healthy': {0: 'Yes', 1: 'No', 2: 'Yes', 3: 'Yes', 4: 'No', 5: 'No'},
        'A': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0},
        'B': {0: 1, 1: 1, 2: 0, 3: 0, 4: 0, 5: 0},
        'C': {0: 1, 1: 0, 2: 1, 3: 1, 4: 0, 5: 1}}

# create data frame from sample data
df = pd.DataFrame(data)

# sum by state
df_sum = df.sum(numeric_only=True)

# sum group by state
df_gby = df.groupby(['Healthy']).sum(numeric_only=True)

# plot sum
df_sum.plot.bar()

# plot gby sum
df_gby.transpose().plot.bar(stacked=True)

聚合结果:

# df_sum
A    0
B    2
C    4

# df_gby
         A  B  C
Healthy         
No       0  1  1
Yes      0  1  3

图像/图表:

  1. Just a SUM
  2. SUM with GROUP BY

关于python - 基于 pandas 中的列的分层条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768691/

相关文章:

javascript - 如何利用 dc.js 和 d3.js 显示值堆积条形图?

python - 对重新编译行为感到困惑

python - 测试列表中的连续数字

python - github 上 Python 包的自述文件的格式是什么?

pandas - 如何默认打印 pandas 数据框的前 n 行?

python - 从 python 字典创建 pandas 数据框

core-plot - 如何使用 coreplot 在条形图上同时使用自定义标签和单个条形的标签?

javascript - 从 Python 在页面上执行 JS 代码

python - 创建一个 Pandas 滚动窗口系列数组

python - 在 Python3 的 Matplotlib 的极坐标/径向条形图中获取条形图顶部的标签