web-dev-qa-db-fra.com

Pandas: tracer plusieurs séries temporelles DataFrame en un seul tracé

J'ai les pandas suivants 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

Il s'agit d'un cadre de données avec plusieurs données chronologiques, de min=1 à max=35. Chaque Group a une série chronologique comme celle-ci. 

J'aimerais tracer chaque série temporelle individuelle de A à Z par rapport à un axe des abscisses compris entre 1 et 35. L'axe des ordonnées serait la blocks à chaque fois. 

Je pensais utiliser quelque chose comme un complot de Andrews Curves , qui tracerait chaque série les unes contre les autres. Chaque "teinte" serait définie sur un groupe différent. (D'autres idées sont les bienvenues.)

 enter image description here

Mon problème: comment formater cette base de données pour tracer plusieurs séries? Les colonnes doivent-elles être GroupA, GroupB, etc.? 

Comment obtenez-vous le dataframe pour être au format:

time GroupA blocksA GroupsB blocksB GroupsC blocksC....

Est-ce le format correct pour un tracé Andrews comme indiqué? 

MODIFIER

Si j'essaye:

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

l'axe des x est complètement incorrect. Toutes les séries chronologiques doivent être tracées de 0 à 35, en une seule série. 

 enter image description here

Comment résoudre ce problème? 

6
ShanZhengYang

Regardez ces variantes. La première correspond aux courbes d'Andrews et la seconde à un graphe multiligne regroupé dans une colonne Month. La structure de données data comprend trois colonnes Temperature, Day et 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()

Lorsque vous tracez la courbe d'Andrews, vos données récupérées dans une fonction. Cela signifie que les courbes d'Andrews représentées par des fonctions proches suggèrent que les points de données correspondants seront également proches. 

 enter image description here

7
Serenity

Vous pouvez restructurer les données sous forme de tableau croisé dynamique:

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