绘制 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

pandas:绘制 DataFrame 时未显示 MultiIndex

在 IPython 中使用 Pandas 绘制股票图表

Pandas - 以不等间隔绘制事件

Python & Pandas:当 Pandas 将直方图绘制到特定轴时的奇怪行为

绘制 Pandas DataSeries.GroupBy