webentwicklung-frage-antwort-db.com.de

Pandas: Zeichnen Sie mehrere Zeitreihen-DataFrame in eine einzige Grafik

Ich habe folgende Pandas DataFrame:

     time      Group      blocks
0     1        A           4
1     2        A           7
2     3        A           12
3     4        A           17
4     5        A           21 
5     6        A           26
6     7        A           33
7     8        A           39
8     9        A           48
9     10       A           59
    ....        ....          ....
36     35      A           231
37     1       B           1
38     2       B           1.5
39     3       B           3
40     4       B           5
41     5       B           6
    ....        ....          ....
911    35      Z           349

Dies ist ein Datenrahmen mit mehreren Zeitreihen-Daten, von min=1 bis max=35. Jede Group hat eine solche Zeitreihe. 

Ich möchte jede einzelne Zeitreihe A bis Z gegen eine x-Achse von 1 bis 35 plotten. Die y-Achse wäre zu jedem Zeitpunkt blocks

Ich dachte daran, so etwas wie eine Andrews Curves-Plot zu verwenden, die jede Serie gegeneinander plotten würde. Jeder "Farbton" würde auf eine andere Gruppe eingestellt. (Andere Ideen sind willkommen.)

 enter image description here

Mein Problem: Wie formatiert man diesen Datenrahmen, um mehrere Serien zu zeichnen? Sollten die Spalten GroupA, GroupB usw. sein? 

Wie bekommt man das Datenframe im Format:

time GroupA blocksA GroupsB blocksB GroupsC blocksC....

Ist dies das richtige Format für eine Andrews-Zeichnung wie gezeigt? 

BEARBEITEN

Wenn ich es versuche:

df.groupby('Group').plot(legend=False)

die X-Achse ist völlig falsch. Alle Zeitreihen sollten von 0 bis 35 in einer Serie dargestellt werden. 

 enter image description here

Wie löse ich das? 

6
ShanZhengYang

Schau dir diese Varianten an. Die erste ist Andrews 'Kurven und die zweite ist ein mehrzeiliges Diagramm, das nach einer Spalte Month gruppiert ist. Der Datenrahmen data enthält drei Spalten Temperature, Day und Month:

import pandas as pd
import statsmodels.api as sm
import matplotlib.pylab as plt
from pandas.tools.plotting import andrews_curves

data = sm.datasets.get_rdataset('airquality').data
fig, (ax1, ax2) = plt.subplots(nrows = 2, ncols = 1)
data = data[data.columns.tolist()[3:]] # use only Temp, Month, Day

# Andrews' curves
andrews_curves(data, 'Month', ax=ax1)

# multiline plot with group by
for key, grp in data.groupby(['Month']): 
    ax2.plot(grp['Day'], grp['Temp'], label = "Temp in {0:02d}".format(key))
plt.legend(loc='best')    
plt.show()

Wenn Sie die Kurve von Andrews zeichnen, werden Ihre Daten für eine Funktion gerettet. Das bedeutet, dass Andrews-Kurven, die durch nahe beieinander liegende Funktionen dargestellt werden, darauf schließen lassen, dass die entsprechenden Datenpunkte ebenfalls nahe beieinander liegen. 

 enter image description here

7
Serenity

Sie können die Daten als Pivot-Tabelle umstrukturieren:

df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()
1
Michael Thomas