LOR*_*121 1 python pivot-table matplotlib 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
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
我想创建一个条形图,类别为 x 轴,no_show_prop 为 y 轴,两个不同颜色的条形表示每个类别的女性和男性。我也尝试过使用 groupby 但它并没有像我想要的那样出现。
我认为这应该做你正在寻找的。从您当前的 开始data_pv,您可以执行以下操作,将数据重塑为更容易以您想要的方式进行绘图的形式。
df = data_pv.pivot(index='category', columns='gender', values='no_show_prop')
Run Code Online (Sandbox Code Playgroud)
df 现在看起来像:
gender F M
category
alcoholism 25.183974 17.267197
diabetes 18.141277 17.672229
hipertension 17.321859 17.254720
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地做:
df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
这可以使用长格式的数据帧来完成seaborn,这使得制作分类条形图变得非常容易,而无需将数据帧转换为宽格式。
import seaborn as sns
sns.barplot(x='category', y='no_show_prop', hue='gender', data=df)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14431 次 |
| 最近记录: |