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

时间:2018-02-13 14:05:45

标签: 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的总和对应于一个条)。另外,我想通过Healthy列对它们进行分组,即每个条都应该是分层的。例如,state_C栏的高度为4(总和为4),它应该由两种颜色组成(一种颜色的高度为3,因为我们有三个Healty ==是和另一种颜色高度为1因为我们有一个Healty ==否)。

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

不确定我是否正确,但我会尝试。

示例数据:

(列顺序并不重要)

   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