2016-11-05 5 views
1

Ich betrachte Wohneigentum innerhalb unterschiedlicher Kreditstatus, und möchte dies mit einem gestapelten Balkendiagramm in Prozentsätzen anzeigen.Erstellen eines prozentualen gestapelten Balkendiagramms mit groupby

Ich habe in der Lage gewesen, ein Frequenz gestapeltes Balkendiagramm mit diesem Code zu erstellen:

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

, die mir dieses Bild gibt: 1

aber ich kann nicht herausfinden, wie die Grafik zu transformieren in Prozent. So zum Beispiel, ich möchte in der Standardgruppe erhalten, die Prozent eine Hypothek, die besitzen, usw.

Hier ist meine groupby Tabelle für Kontext 2:

Dank !!

+0

Fügen Sie Ihre groupby Daten auf die Frage als Text, nicht ein Bild; es macht die Antwort einfacher und wahrscheinlicher. – cco

Antwort

1

Ich glaube, Sie brauchen, um sich die Prozentsätze zu konvertieren:

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

enter image description here

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

enter image description here

+0

Das gibt immer noch Bars mit den gleichen relativen Höhen wie zuvor anstelle der gleichen Höhen, außer dass jetzt die y-Achse von 0 auf 4 geht. Irgendwelche Gedanken darüber, warum das passiert? – yogz123

+0

Könnten Sie einige Beispieldaten, z. 'sub_df1.to_dict ('list')' – Alexander

+0

Es gab mir einen Fehler mit 'Liste', so dass ich stattdessen 'dict' benutzte - lassen Sie mich wissen, wenn das nicht hilfreich ist. {('Default', 'MORTGAGE'): 498, ('Default', 'OWN'): 110, ('Standard', 'RENT'): 611, ('Vollständig bezahlt', 'MORTGAGE') : 3100, ('Vollständig bezahlt', 'NONE'): 1, ('Vollständig bezahlt', 'ANDERE'): 5, ('Vollständig bezahlt', 'OWN'): 558, ('Vollständig bezahlt ", RENT"): 2568, ("Spät (16-30 Tage)", "HYPOTHEK"): 1101, ("Spät (16-30 Tage)", "OWN"): 260, (' Spät (16-30 Tage) ',' MIETE '): 996, (' Spät (31-120 Tage) ',' HYPOTHEK '): 994, (' Spät (31-120 Tage) ',' OWN '): 243, ('Spät (31-120 Tage)', 'MIETE'): 1081} – yogz123

Verwandte Themen