web-dev-qa-db-fra.com

Tracer un Pandas DataSeries.GroupBy

Je suis nouveau sur python et pandas, et j'ai les DataFrame suivants.

Comment puis-je tracer le DataFrame où chaque ModelID est un tracé séparé, saledate est l'axe des x et MeanToDate est l'axe des y?

Tentative

data[40:76].groupby('ModelID').plot()

enter image description here

DataFrame

enter image description here

18
Nyxynyx

Vous pouvez faire les tracés en faisant une boucle sur les groupes à partir de groupby:

import matplotlib.pyplot as plt

for title, group in df.groupby('ModelID'):
    group.plot(x='saleDate', y='MeanToDate', title=title)

Voir pour plus d'informations sur le traçage avec pandas dataframes:
http://pandas.pydata.org/pandas-docs/stable/visualization.html
et pour faire une boucle sur un objet groupby:
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups

24
joris

Exemple avec agrégation:

Je voulais faire quelque chose comme ceci, si pandas avait une esthétique de couleur comme ggplot:

aggregated = df.groupby(['model', 'training_examples']).aggregate(np.mean)
aggregated.plot(x='training_examples', y='accuracy', label='model')

(colonnes: le modèle est une chaîne, training_examples est un entier, la précision est une décimale)

Mais cela produit juste un gâchis.

Grâce à la réponse de joris, je me suis retrouvé avec:

for index, group in df.groupby(['model']):
    group_agg = group.groupby(['training_examples']).aggregate(np.mean)
    group_agg.plot(y='accuracy', label=index)

J'ai trouvé que title= Remplaçait simplement le titre unique de l'intrigue à chaque itération de boucle, mais label= Fait ce que vous attendez - après exécutant plt.legend(), bien sûr.

10
chbrown