2015-04-25 15 views
9

Mam następujące próbki zestawu danych:Boxplot z pand i 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 

i potrzebują wykresu pudełkowego, pogrupowanych według kolumny 0. Mam następujący:

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

Ale kończę z trzema wątkami. Jak umieścić wszystkie trzy na jednej działce? Dzięki. enter image description here

Odpowiedz

5

Nie wierzę, trzeba użyć GroupBy.

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

W 0.16.0 wersja pandy, można po prostu to zrobić:

df.boxplot(by='0') 

Rezultat:

enter image description here

+0

Jaka jest skala osi y? To nie odpowiada danym. – Alexander

+0

@Alexander Oh, to. Zmieniłem dane w lokalnym pliku. Zaktualizowałem to teraz. – fixxxer

+0

Oto dokument dla 'by' cluase, http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.boxplot.html. Np. Wykres działek (boków) można pogrupować według więcej niż jednej kolumny. – xpt