【发布时间】:2017-06-04 19:23:13
【问题描述】:
我有如下所示的时间序列数据
In[118]: df
Out[118]:
Value
Date
2016-09-15 00:00:00.000000 0.446219
2016-09-15 00:10:07.958815 0.148335
2016-09-15 00:29:34.960880 0.300437
2016-09-15 00:40:38.262082 0.187721
2016-09-15 00:55:57.910574 0.108615
2016-09-15 01:15:29.595385 0.735744
2016-09-15 01:33:15.055574 0.167966
2016-09-15 01:47:47.570397 0.083261
...
2017-01-19 14:09:11.347323 0.140574
2017-01-19 14:26:05.349305 0.122632
2017-01-19 14:38:02.607448 0.530922
2017-01-19 14:54:38.043359 0.983858
2017-01-19 15:06:36.638637 0.723228
2017-01-19 15:18:43.197898 0.380847
2017-01-19 15:33:03.925526 0.209378
2017-01-19 15:52:12.064726 0.969853
2017-01-19 16:03:07.974073 0.932526
[12175 rows x 1 columns]
我试图将这个时间序列的每一周绘制在同一个图上,x 轴跨越一周中的几天。在上一个问题的帮助下,我现在几乎可以通过如下构造一个 MultiIndex 来完成此任务。 (为了简单起见,我只画了 4 周)
pl_df = df.copy()
pl_df.index = [df.index.weekday_name, df.index.time, df.index.to_period('w')]
ax = pl_df.Value.unstack().interpolate().iloc[:, :2].plot()
ax.figure.autofmt_xdate()
问题是一周中的日子似乎很混乱,从 x 轴可以看出。我尝试使用简单的列表推导以正确的“星期几”顺序重新索引我的 DataFrame,以便 x 轴看起来正确,但这似乎没有任何影响。由于我对输出的解释,我什至不完全确定 MultiIndex 是否正确。我完全不确定索引的排序发生了什么。
要生成类似的DataFrame,可以运行如下
import datetime
import numpy as np
import pandas as pd
start_date = datetime.datetime(2016, 9, 15)
end_date = datetime.datetime.now()
dts = []
cur_date = start_date
while cur_date < end_date:
dts.append((cur_date, np.random.rand()))
cur_date = cur_date + datetime.timedelta(minutes=np.random.uniform(10, 20))
df = pd.DataFrame(dts, columns=['Date', 'Value']).set_index('Date')
【问题讨论】:
标签: python python-2.7 pandas matplotlib