按月绘制组数据

时间:2013-08-26 19:56:07

标签: python matplotlib pandas

我正在尝试按月DataFrame分组,其中索引列为DateTime 我的目标是将所有月份都绘制在不同的地块上。

index=date_range('2011-9-1 00:00:03', '2012-09-01  00:00:03', freq='10min')
df=pd.DataFrame(np.random.rand(len(index),3),index=index)
df2 = df.groupby(lambda x: x.month)
df2.plot()

这给了我14个图(不是12个),其中2个是空的 - 在x轴上是2000年到2010年的年份。比第一个图是1月。

希望得到如何应对这一点的好建议。

1 个答案:

答案 0 :(得分:1)

你想要达到什么目的?在对数据进行分组时,如果要绘制数据,通常会以某种方式对其进行聚合。例如:

import pandas as pd
index=pd.date_range('2011-1-1 00:00:03', '2011-12-31 23:50:03', freq='10min')
df=pd.DataFrame(np.random.rand(len(index),3),index=index)
df2 = df.groupby(lambda x: x.month)
for key, group in df2:
    group.plot()

更新:修复超过一个月的群组。这可能不是最好的解决方案,但它首先出现在我的脑海中。

import pandas as pd

num_ticks = 15

index=pd.date_range('2011-9-1 00:00:03', '2012-09-01  00:00:03', freq='10min')
df=pd.DataFrame(np.random.rand(len(index),3),index=index)
df2 = df.groupby(lambda x: x.month)
for key, group in df2:
    step = len(group) / num_ticks
    reset = group.reset_index()
    reset.plot()
    plt.xticks(reset.index[::step],
               reset['index'][::step].apply(
                    lambda x: x.strftime('%Y-%m-%d')).values,
               rotation=70)