2013-05-04 4 views
17

Я новичок в python и pandas и имею следующие DataFrame.Построение Pandas DataSeries.GroupBy

Как сюжет DataFrame, где каждый ModelID отдельный участок, saledate является осью х и MeanToDate является осью у?

Покушение

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

enter image description here

DataFrame

enter image description here

ответ

22

Вы можете сделать участки, обернув над группами из groupby:

import matplotlib.pyplot as plt 

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

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

+2

Графики будут отображаться на независимых фигурах даже без 'plt.figure()' first. – gented

+0

еще один хороший учебник по использованию 'groupby' находится здесь: https://chrisalbon.com/python/pandas_apply_operations_to_groups.html – glS

10

Пример агрегирования:

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

aggregated = df.groupby(['model', 'training_examples']).aggregate(np.mean) 
aggregated.plot(x='training_examples', y='accuracy', label='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(), конечно.

Смежные вопросы