2013-08-28 23 views
7

Ok, więc mam ramkę danych, która zawiera dane timeseries, które ma indeks wielowierszowy dla każdej kolumny. Oto przykład tego, jak dane wyglądają i są w formacie csv. Ładowanie danych nie stanowi problemu.Boxplot z pandami groupby

enter image description here

Co chcę robić to, aby móc stworzyć wykres typu boxplot z tymi danymi pogrupowane według różnych catagories w określonej linii multiinex. Na przykład, gdybym miał grupować według "GATUNKÓW", miałbym grupy, "aq", "gr", "mix", "sed" i pole dla każdej grupy w określonym czasie w przedziałach czasowych.

Próbowałem to:

grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES') 
grouped.boxplot() 

ale daje mi wykres typu boxplot (płaska linia) dla każdego punktu w grupie zamiast do grupowania zestawu. Czy istnieje prosty sposób na zrobienie tego? Nie mam żadnych problemów z grupowaniem, ponieważ mogę agregować grupy w dowolny sposób, ale nie jestem pewien, co robię źle w tym pudełku.

Każda pomoc zostanie doceniona.

Odpowiedz

10

myślę, że zorientowaliśmy się, być może będzie to pomocne dla kogoś:

grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES').T 
grouped.boxplot() 

wyjściu Zasadniczo GroupBy musiała być transponowana tak że boxplot pokazał właściwą grupowanie:

enter image description here

1

Powinno działać w wersji 0.16:

data['2013-08-17'].boxplot(by='SPECIES') 
12

kod:

data['2013-08-17'].boxplot(by='SPECIES') 

nie będzie działać, jak boxplot jest funkcją o DataFrame a nie serialu.

W pandach> 0.18.1 funkcja boxplot ma argument columns, który określa kolumnę, z której dane są pobierane.

Więc

data.boxplot(column='2013-08-17',by='SPECIES') 

powinien wrócić pożądany rezultat.