【问题标题】:Creating percentage stacked bar chart using groupby使用 groupby 创建百分比堆积条形图
【发布时间】:2017-03-18 22:46:15
【问题描述】:

我正在查看不同贷款状态级别内的房屋所有权,我想使用堆积条形图以百分比形式显示这一点。

我已经能够使用此代码创建频率堆积条形图:

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")

这给了我这张照片:1

但我不知道如何将图表转换为百分比。因此,例如,我想进入默认组,哪些百分比有抵押,哪些拥有等等。

这是我的 context2 分组表:

谢谢!!

【问题讨论】:

  • 将您的 groupby 数据作为文本而不是图片添加到问题中;它使回答更容易,更有可能。

标签: python-2.7 dataframe group-by stacked-chart


【解决方案1】:

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

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")

sub_df3 = sub_df1.unstack().T
sub_df3.index = sub_df3.index.droplevel()  # Drop `count` label.
sub_df3 = sub_df3.div(sub_df3.sum())
sub_df3.T.plot(kind='bar', stacked=True, rot=1, figsize=(8, 8), 
               title="Home ownership across Loan Types")

【讨论】:

  • 这仍然给出了与以前相同的相对高度而不是相等高度的条形,除了现在 y 轴从 0 变为 4。关于为什么会发生这种情况的任何想法?
  • 您能否发布一些示例数据,例如sub_df1.to_dict('list')
  • 使用 'list' 给我一个错误,所以我改用了 'dict' - 如果这没有帮助,请告诉我。 {('Default', 'MORTGAGE'): 498, ('Default', 'OWN'): 110, ('Default', 'RENT'): 611, ('Fully Paid', 'MORTGAGE'): 3100, ('全额支付', 'NONE'): 1, ('全额支付', 'OTHER'): 5, ('全额支付', 'OWN'): 558, ('全额支付', 'RENT'): 2568, ('延迟 (16-30 天)', 'MORTGAGE'): 1101, ('延迟 (16-30 天)', 'OWN'): 260, ('延迟 (16-30 天)', ' RENT'): 996, ('Late (31-120 days)', 'MORTGAGE'): 994, ('Late (31-120 days)', 'OWN'): 243, ('Late (31-120 days) )', '租金'): 1081}
  • 非常感谢!您是否知道如何按贷款状态而不是房屋所有权来组织酒吧?
  • 太棒了!非常感谢!!
【解决方案2】:

我通过两次转置数据框来计算百分比。有没有一步步把逻辑展示的更明确。

#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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2019-09-27
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多