从 pandas 数据帧数据透视表创建绘图

问题描述

我是Python新手,想知道如何在我使用数据透视表函数创建的数据上创建条形图。

#Create a pivot table for handicaps count calculation for no-show people based on their gender 
pv = pd.pivot_table(df_main, values=['hipertension','diabetes','alcoholism'], 
                     columns='status',index='gender',aggfunc=np.sum)
#Reshape the pivot table for easier calculation 
        
data_pv = pv.unstack().unstack('status').reset_index().rename(columns={'level_0':'category','No-Show':'no_show', 'Show-Up':'show_up'})
        
data_pv['no_show_prop'] = (data_pv['no_show']/
                          (data_pv['no_show']+data_pv['show_up']))*100
data_pv

因此:

status  category    gender  no_show show_up no_show_prop
0   alcoholism      F        308       915     25.183974
1   alcoholism      M        369      1768     17.267197
2   diabetes        F        1017     4589     18.141277
3   diabetes        M        413      1924     17.672229
4   hipertension    F        2657    12682     17.321859
5   hipertension    M        1115     5347     17.254720

我想创建一个条形图,类别为x轴,no_show_prop为y轴,每个类别有两个不同颜色的条形图,分别表示雌性和雄性。我也试过使用Groupby,但结果不是我想要的那样。

我希望创建一个类别为x轴、no_show_prop为y轴的条形图,而不是下图中的条形图,其中有两个不同颜色的条形图,分别表示每个类别的男性和女性。我也试过使用Groupby,但结果不是我想要的那样。


解决方案

data_pv开始,使用pandas.Dataframe.pivotpandas.DataFrame.pivot_table将数据重塑为较宽的形式,pandas.DataFrame.plot更容易绘制,它将使用索引作为x轴,将列作为条形值。

  • pivot_table如果值需要聚合(例如'sum')
  • pivot如果不需要聚合

使用kind='bar'绘制条形图,或使用kind='line'绘制折线图。两者都可以工作,具体取决于所需的绘图。

df = data_pv.pivot(index='category', columns='gender', values='no_show_prop')

df现在看起来如下:

gender                F          M
category                          
alcoholism    25.183974  17.267197
diabetes      18.141277  17.672229
hipertension  17.321859  17.254720

然后您可以简单地执行以下操作:

df.plot(kind='bar')

相关文章