Python 2.7 使用groupby创建百分比堆叠条形图

Python 2.7 使用groupby创建百分比堆叠条形图,python-2.7,dataframe,group-by,stacked-chart,Python 2.7,Dataframe,Group By,Stacked Chart,我正在研究不同贷款状态下的房屋所有权水平,我想用百分比叠加条形图来显示这一点 我已经能够使用以下代码创建频率堆叠条形图: df_trunc1=df[['loan_status','home_ownership','id']] sub_df1=df_trunc1.groupby(['loan_status','home_ownership'])['id'].count() sub_df1.unstack().plot(kind='bar',stacked=True,rot=1,figsize=(8

我正在研究不同贷款状态下的房屋所有权水平,我想用百分比叠加条形图来显示这一点

我已经能够使用以下代码创建频率堆叠条形图:

df_trunc1=df[['loan_status','home_ownership','id']]
sub_df1=df_trunc1.groupby(['loan_status','home_ownership'])['id'].count()
sub_df1.unstack().plot(kind='bar',stacked=True,rot=1,figsize=(8,8),title="Home ownership across Loan Types")
这给了我一张照片:

但我不知道如何将图表转换成百分比。举个例子,我想进入违约组,哪个百分比有抵押贷款,哪个拥有,等等

以下是我的groupby表的上下文:


谢谢

我认为您需要自己转换百分比:

d = {('Default', 'MORTGAGE'): 498, ('Default', 'OWN'): 110, ('Default', 'RENT'): 611, ('Fully Paid', 'MORTGAGE'): 3100, ('Fully Paid', 'NONE'): 1, ('Fully Paid', 'OTHER'): 5, ('Fully Paid', 'OWN'): 558, ('Fully Paid', 'RENT'): 2568, ('Late (16-30 days)', 'MORTGAGE'): 1101, ('Late (16-30 days)', 'OWN'): 260, ('Late (16-30 days)', 'RENT'): 996, ('Late (31-120 days)', 'MORTGAGE'): 994, ('Late (31-120 days)', 'OWN'): 243, ('Late (31-120 days)', 'RENT'): 1081}

sub_df1 = pd.DataFrame(d.values(), columns=['count'], index=pd.MultiIndex.from_tuples(d.keys()))
sub_df2 = sub_df1.unstack()
sub_df2.columns = sub_df2.columns.droplevel()  # Drop `count` label.
sub_df2 = sub_df2.div(sub_df2.sum())
sub_df2.T.plot(kind='bar', stacked=True, rot=1, figsize=(8, 8), 
               title="Home ownership across Loan Types")


我通过将数据帧转置两次来计算百分比。一步一步地做,以更明确地显示逻辑

#transpose
to_plot =sub_df1.unstack()
to_plot_transpose = to_plot.transpose()

#calc %
to_plot_transpose_pct = to_plot_transpose.div(to_plot_transpose.sum())

#transpose back
to_plot_pct=to_plot_transpose_pct.transpose()

#plot
to_plot_pct.plot(kind='bar',stacked=True,rot=1,figsize= . 
  (8,8),title="Home ownership across Loan Types")

这仍然给出了与以前相同的相对高度,而不是相等的高度,除了现在y轴从0变为4。关于为什么会发生这种情况有什么想法吗?你能把一些示例数据,例如
sub\u df1.发布到dict('list')
使用“list”给我一个错误,所以我改用了“dict”-如果没有帮助,请告诉我。(‘违约’、‘抵押’):498、‘违约’、‘自有’:110、‘违约’、‘租金’:611、‘全额支付’、‘抵押’:3100、‘全额支付’、‘无’:1、‘全额支付’、‘其他’:5、‘全额支付’、‘自有’:558、‘全额支付’、‘租金’:2568、‘逾期(16-30天)‘抵押’:1101、‘逾期(16-30天)’、‘自有’:260、‘逾期(16-30天)‘租金’):996,(‘迟(31-120天)’‘抵押’):994,(‘迟(31-120天)’‘自己’):243,(‘迟(31-120天)’‘租金’):1081}非常感谢!你知道如何通过贷款而不是房屋所有权来组织酒吧吗?太棒了!非常感谢你!!将groupby数据作为文本而不是图片添加到问题中;这使得回答更容易,也更有可能。
#transpose
to_plot =sub_df1.unstack()
to_plot_transpose = to_plot.transpose()

#calc %
to_plot_transpose_pct = to_plot_transpose.div(to_plot_transpose.sum())

#transpose back
to_plot_pct=to_plot_transpose_pct.transpose()

#plot
to_plot_pct.plot(kind='bar',stacked=True,rot=1,figsize= . 
  (8,8),title="Home ownership across Loan Types")