Plotting a Pandas DataSeries.GroupBy

匿名 (未验证) 提交于 2019-12-03 02:05:01

问题:

I am new to python and pandas, and have the following DataFrame.

How can I plot the DataFrame where each ModelID is a separate plot, saledate is the x-axis and MeanToDate is the y-axis?

Attempt

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

DataFrame

回答1:

You can make the plots by looping over the groups from groupby:

import matplotlib.pyplot as plt  for title, group in df.groupby('ModelID'):     group.plot(x='saleDate', y='MeanToDate', title=title) 

See for more information on plotting with pandas dataframes:
http://pandas.pydata.org/pandas-docs/stable/visualization.html
and for looping over a groupby-object:
http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups



回答2:

Example with aggregation:

I wanted to do something like the following, if pandas had a colour aesthetic like ggplot:

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

(columns: model is a string, training_examples is an integer, accuracy is a decimal)

But that just produces a mess.

Thanks to joris's answer, I ended up with:

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

I found that title= was just replacing the single title of the plot on each loop iteration, but label= does what you'd expect -- after running plt.legend(), of course.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!