绘制 Pandas DataSeries.GroupBy
Posted
技术标签:
【中文标题】绘制 Pandas DataSeries.GroupBy【英文标题】:Plotting a Pandas DataSeries.GroupBy 【发布时间】:2013-04-28 21:00:19 【问题描述】:我是 python 和 pandas 的新手,并且有以下DataFrame
。
如何绘制DataFrame
,其中每个ModelID
是一个单独的图,saledate
是 x 轴,MeanToDate
是 y 轴?
尝试
data[40:76].groupby('ModelID').plot()
数据帧
【问题讨论】:
【参考方案1】:您可以通过循环遍历来自groupby
的组来制作图:
import matplotlib.pyplot as plt
for title, group in df.groupby('ModelID'):
group.plot(x='saleDate', y='MeanToDate', title=title)
有关使用 pandas 数据框进行绘图的更多信息,请参阅:http://pandas.pydata.org/pandas-docs/stable/visualization.html 并用于循环分组对象:http://pandas.pydata.org/pandas-docs/stable/groupby.html#iterating-through-groups
【讨论】:
即使没有plt.figure()
,绘图也会显示在独立的数字上。
另一个很好的使用groupby
的教程在这里:chrisalbon.com/python/pandas_apply_operations_to_groups.html【参考方案2】:
聚合示例:
如果 pandas 具有 ggplot 之类的色彩美学,我想做类似以下的事情:
aggregated = df.groupby(['model', 'training_examples']).aggregate(np.mean)
aggregated.plot(x='training_examples', y='accuracy', label='model')
(columns:model是字符串,training_examples是整数,accuracy是小数)
但这只会造成混乱。
感谢 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()
之后,当然.
【讨论】:
以上是关于绘制 Pandas DataSeries.GroupBy的主要内容,如果未能解决你的问题,请参考以下文章
pandas:绘制 DataFrame 时未显示 MultiIndex