2015-04-25 24 views
9

Ich habe folgende Dataset Beispiel:Boxplot mit Pandas und groupby

 0   1 
0 0 0.040158 
1 2 0.500642 
2 0 0.005694 
3 1 0.065052 
4 0 0.034789 
5 2 0.128495 
6 1 0.088816 
7 1 0.056725 
8 0 -0.000193 
9 2 -0.070252 
10 2 0.138282 
11 2 0.054638 
12 2 0.039994 
13 2 0.060659 
14 0 0.038562 

und brauchen eine Box und Whisker-Plot, gruppiert nach Spalte 0. Ich habe die folgenden:

plt.figure() 
grouped = df.groupby(0) 
grouped.boxplot(column=1) 
plt.savefig('plot.png') 

Aber ich am Ende mit drei Teilplots. Wie kann man alle drei auf einem Grundstück platzieren? Danke. enter image description here

Antwort

5

Ich glaube nicht, Sie groupby verwenden müssen.

df2 = df.pivot(columns=df.columns[0], index=df.index) 
df2.columns = df2.columns.droplevel() 

>>> df2 
0   0   1   2 
0 0.040158  NaN  NaN 
1  NaN  NaN 0.500642 
2 0.005694  NaN  NaN 
3  NaN 0.065052  NaN 
4 0.034789  NaN  NaN 
5  NaN  NaN 0.128495 
6  NaN 0.088816  NaN 
7  NaN 0.056725  NaN 
8 -0.000193  NaN  NaN 
9  NaN  NaN -0.070252 
10  NaN  NaN 0.138282 
11  NaN  NaN 0.054638 
12  NaN  NaN 0.039994 
13  NaN  NaN 0.060659 
14 0.038562  NaN  NaN 

df2.boxplot() 

boxplot

20

In 0.16.0 Version der Pandas, können Sie einfach tun:

df.boxplot(by='0') 

Ergebnis:

enter image description here

+0

Was ist der Maßstab der y-Achse? Es entspricht nicht den Daten. – Alexander

+0

@Alexander Oh, das. Ich hatte die Daten in der lokalen Datei geändert. Habe es jetzt aktualisiert. – fixxxer

+0

Hier ist das Dokument für die 'by' cluase, http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.boxplot.html. Z. B. kann das Kasten- (Whisker-) Diagramm um mehr als eine Spalte gruppiert werden. – xpt