我有一个时间序列,列出了几个月交易历史的期货合约的价格数据。我想有一个图表(折线图),显示时间序列中最近4周的每周刻度数据的交易历史(该系列不断更新)
X轴将显示星期一到星期五的天数,并且图表上任何时候都会有4条单独的行详细说明刻度数据。我已经设法使用一些代码来绘制每天的最后一笔交易,但是我需要每个线路每天只有一个数据点。
这是一个Excel图表(!),我试图用刻度数据表示,只有线条会更加不稳定,因为会有更多的数据点。
基本上,一张图表上有4行显示过去四周的交易价格数据:
我没有尝试过的代码(它在工作中),但明天可以上传。
答案 0 :(得分:1)
给你一些假数据:
In [11]: rng = pd.date_range('2013', freq='H', periods=1000)
In [12]: df = pd.DataFrame(np.random.randn(len(rng)), index=rng, columns=['data'])
首先,填充周数(作为列):
In [13]: df['week'] = df.index.week
接下来,计算从一周开始以来的时间(可能有更优雅的方法):
In [14]: df['week_beginning'] = df.index.to_period('W').to_timestamp()
In [15]: df['week_time'] = df.index.to_series() - df['week_beginning']
现在您可以使用pivot_table
:
In [16]: df.pivot_table(values='data', rows='week_time', cols='week')
Out[16]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 168 entries, 0 to 601200000000000
Data columns (total 7 columns):
33 120 non-null values
34 168 non-null values
35 168 non-null values
36 168 non-null values
37 168 non-null values
38 168 non-null values
39 40 non-null values
dtypes: float64(7)
听起来这是你想要绘制的东西(使用your previous question中的技术):
In [17]: df.pivot_table('data', 'week_time', 'week').rename(columns=lambda x: 'Week ' + str(x)).plot()
注意:这个特殊情节相当混乱,因为有很多数据点,预先聚合一些数据可能是有意义的。