2016-04-06 10 views
1

Ich bin neu in Pandas und nicht sicher, wie man ein Balkendiagramm jeder Kategorie (6, 7) zeigt, das den Anteil (Prozent) von "Wet" zu anderen Zuständen im folgenden Datenrahmen zeigt:Barpots von Item-Kategorien in Pandas

Mine Category State 
X23 6 Wet 
M34 7 Wet 
K28 7 Dry 
U56 7 Swampy 
S90 6 Wet 
E35 7 Dry 
X67 6 Wet 

Meine Bemühungen bisher:

sub =df.groupby(['Category','State==Wet'].sum() 
sub.plot(kind='bar') 

Kann jemand bitte helfen? Dank

EDIT: Dies ist der Datenrahmen Ausgang

Category Percent “wet” Percent “non wet” 
6 3/3 (100%) 0/3 (0%) 
7 1/4 ¾ (75 %) 

So 6 und 7 auf der x-Achse aufgetragen werden, so feucht und nicht nass in jeder bar gestapelt (6) und Stange (7) .

+0

können Sie hinzufügen Ausgang gewünscht - Datenrahmen? – jezrael

+0

Hinzugefügt Dank @jezrael – user27976

+0

Klingt, als ob Sie in der Spalte Kategorie drehen und nach Prozent aggregieren möchten. Lass mich sehen. – bamdan

Antwort

1

Sie können benutzerdefinierte Funktion f1 mit DataFrame constructor verwenden und T:

def f1(x): 
    return (sum(x == 'Wet')/float(len(x)))*100, (sum(x != 'Wet')/float(len(x)))*100 

grouped = df.groupby(['Category'])['State'].apply(f1) 

new_cols = ['wet','non-wet'] 
print pd.DataFrame(zip(*grouped), columns=grouped.index,index=new_cols).T 
      wet non-wet 
Category     
6   100.0  0.0 
7   25.0  75.0 

sub.plot(kind='bar') 
+0

Danke für deine Zeit und hilf @jezrael. Es hat perfekt funktioniert! – user27976

0

Sie können value_counts() verwenden und dann das Ergebnis plotten. In meinem Dataframe möchte ich dies für die Spalte TestGroup tun, aber Sie können mit der Kategorie Spalte tun.

df.TestGroup.value_counts(normalize= True).plot(kind = "bar") 

enter image description here

Hoffnung, das hilft.

+0

Hallo @bamdan, Danke für Ihre Hilfe. Ich habe gerade meinen Beitrag bearbeitet. Ich denke, es war nicht klar genug, dass ich die einzigartigen Kategorien auf der X-Achse haben wollte. Also wird es zwei Spalten geben, die den Anteil von "Wet" an anderen Staaten zeigen. – user27976