Построение Pandas DataSeries.GroupBy

Я новичок в python и pandas и имею следующее DataFrame.

Как я могу построить график DataFrame, где каждый ModelID представляет собой отдельный график, saledate - ось x, а MeanToDate - ось y?

Попытка

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

enter image description here

DataFrame

enter image description here

Ответ 1

Вы можете сделать графики, перейдя по группам из groupby:

import matplotlib.pyplot as plt

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

См. дополнительную информацию о построении с помощью pandas dataframes:
http://pandas.pydata.org/pandas-docs/stable/visualization.html
и для циклизации по групповому объекту:
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups

Ответ 2

Пример с агрегацией:

Я хотел сделать что-то вроде следующего, если pandas имел цветную эстетику, например ggplot:

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

(столбцы: model - строка, training_examples - целое число, точность - десятичная)

Но это просто создает беспорядок.

Благодаря ответу joris я закончил с:

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

Я обнаружил, что title= просто заменяет один заголовок графика на каждой итерации цикла, но label= делает то, что вы ожидаете, - после запуска plt.legend(), конечно.