代码之家  ›  专栏  ›  技术社区  ›  Christin Abel

使用python/pandas规范化数据并绘制为堆叠条形图

  •  1
  • Christin Abel  · 技术社区  · 7 年前

    我有以下数据框:

        land_cover  canopy_cat  count  tc_density_cor
    0           20           1     56       35.760967
    1           20           2     28       35.760967
    2           20           3     11       35.760967
    3           20           4      9       35.760967
    4           20           5      4       35.760967
    5           20           6      3       35.760967
    6           20           7      3       35.760967
    7           20           8      1       35.760967
    8           20           9      4       35.760967
    9           20          10      6       35.760967
    10          20          11      2       35.760967
    11          30           1    194       17.408260
    12          30           2     86       17.408260
    13          30           3     55       17.408260
    14          30           4     36       17.408260
    15          30           5     21       17.408260
    16          30           6     15       17.408260
    17          30           7      9       17.408260
    18          30           8      6       17.408260
    19          30           9     19       17.408260
    20          30          10     14       17.408260
    21          30          11      9       17.408260
    22          40           1    106       17.458283
    23          40           2     45       17.458283
    24          40           3     19       17.458283
    25          40           4     14       17.458283
    26          40           5      9       17.458283
    27          40           6      8       17.458283
    28          40           7      5       17.458283
    29          40           8      5       17.458283
    30          40           9      8       17.458283
    31          40          10     12       17.458283
    32          40          11      3       17.458283
    


    我想把我的数据画成一个堆叠的条形图:
    X轴=土地覆盖
    Y轴=每个雨棚的计数

    我想这个轴函数就是我要找的。然而,在我想要规范化每个土地覆盖相对于“tc_density_cor”的“count”列之前。
    例如,土地覆盖率的“计数”之和=20=127。
    127/35.76=56/x-->新值为:15.76

    我该怎么做??)

    2 回复  |  直到 7 年前
        1
  •  1
  •   Scott Boston    7 年前
        2
  •  1
  •   piRSquared    7 年前

    d.plot.bar(stacked=True)
    

    enter image description here


    def normalize(d):
        sums = d['count'].sum(level='land_cover')
        return d['count'].div(sums, axis=0, level='land_cover') * d['tc_density_cor']
    
    d = df.set_index(['land_cover', 'canopy_cat']).pipe(normalize).unstack()
    
    d.plot.bar(stacked=True)