2017-05-30 93 views
2

我有能耗读数年度数据集,周线图形在30分钟的时间间隔:Python的大熊猫 - 从年度数据

     data 
2012-11-01 00:00:00 0.177 
2012-11-01 00:30:00 0.141 
2012-11-01 01:00:00 0.112 
2012-11-01 01:30:00 0.082 
2012-11-01 02:00:00 0.080 
... 

如何绘制出每个星期的数据消费的多线图?即最终我将得到一个包含52行的图形,其中x轴是一周中的时间(天?半天?小时?),y轴是消耗量。

感谢

+0

你有什么牛逼里德?如果你没有做出任何努力,我们不会为你写代码。和“(天?半天?小时?)”的问题应该由**你**,而不是我们:) – blacksite

回答

1

考虑数据框df索引tidx

tidx = pd.date_range('2016-01-01', '2017-01-01', freq='30T') 
df = pd.DataFrame(dict(data=(np.random.randn(len(tidx)) + .01).cumsum()), tidx) 

创建的时间差相对于第一次约会

deltas = df.index - df.index[0] 

创建星期相对于deltas

week = deltas.days // 7 

建立新的pd.Series对象与pd.MultiIndex

d1 = pd.Series(
    df.data.values, 
    [deltas - pd.to_timedelta(week, 'w'), week] 
) 

unstack

d2 = print(d1.unstack().add_prefix('Week ') 
d2.iloc[:10, :5] 

      Week 0 Week 1  Week 2 Week 3  Week 4 
00:00:00 -0.973634 -5.350765 6.918354 -3.536488 22.489763 
00:30:00 -2.320088 -5.632370 6.670572 -4.852697 24.493568 
01:00:00 -2.499885 -3.458980 8.748229 -4.059241 25.278759 
01:30:00 -3.525366 -2.286180 8.345489 -5.241154 26.086324 
02:00:00 -2.110594 -2.801211 8.626546 -6.840205 28.028737 
02:30:00 -2.811840 -2.605900 9.224140 -6.601106 28.014257 
03:00:00 -4.119560 -3.497173 9.801411 -6.431539 29.284452 
03:30:00 -4.927063 -3.406615 11.729483 -5.526467 27.834364 
04:00:00 -5.573758 -2.559643 13.653698 -3.948048 28.956422 
04:30:00 -4.878375 -4.322923 12.017081 -2.862244 28.364504 

全都在一起

tidx = pd.date_range('2016-01-01', '2017-01-01', freq='30T') 
df = pd.DataFrame(dict(data=(np.random.randn(len(tidx)) + .01).cumsum()), tidx) 

deltas = df.index - df.index[0] 

week = deltas.days // 7 

d1 = pd.Series(
    df.data.values, 
    [deltas - pd.to_timedelta(week, 'w'), week] 
) 

d2 = d1.unstack().add_prefix('Week ') 

ax = d2.plot(rot=30, colormap='jet') 
lg = ax.legend(ncol=4, loc=2, bbox_to_anchor=(1.05, 1)) 

enter image description here

+0

完美谢谢你回答。 –

0

假设你正在使用matplotlib和熊猫否则只安装如果不是并将其导入:

import matplotlib.pyplot as plt 

,直到你闯到大使用plt.show ()它会在默认情况下绘制在图上

因此将您的第一列转换为日期时间用熊猫这种方式pyplot将使用日期轴进行绘图。

pandas.to_datetime(..) 

然后如果你真的想要52线: 称为52时PLT。图(周数据)

然后表现出来:

plt.show() 

,但我会建议你使用恩:

plt.scatter(df['date'],df['data']) 
plt.show() 

这你有你整年都在52分同样图作为一个简单的例子它会给出类似的东西:

plt.scatter() example with a bit of your data