【问题标题】:Layered bar chart based on columns in pandas基于 pandas 列的分层条形图
【发布时间】:2018-07-23 22:25:32
【问题描述】:

我有一个 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,因为我们有三个 Healty==Yes,另一种颜色高度为 1,因为我们有一个 Healty==不)。

如何做到这一点?

【问题讨论】:

    标签: python pandas bar-chart pandas-groupby


    【解决方案1】:

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

    样本数据:

    (列顺序不重要)

       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
    

    图像/图表:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 2021-09-19
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多