擅长:python、mysql、java
<p>假设一个<code>pandas.TimeSeries</code>对象作为起点,您可以分组
按ISO周数和ISO工作日列出的元素
<a href="http://docs.python.org/library/datetime.html#datetime.date.isocalendar" rel="nofollow">^{<cd2>}</a>。下面的语句忽略了ISO年份,汇总了每天的最后一个样本。在</p>
<pre><code>In [95]: daily = ts.groupby(lambda x: x.isocalendar()[1:]).agg(lambda s: s[-1])
In [96]: daily
Out[96]:
key_0
(1, 1) 63
(1, 2) 91
(1, 3) 73
...
(20, 5) 82
(20, 6) 53
(20, 7) 63
Length: 140
</code></pre>
<p>执行下一步可能有更干净的方法,但目标是将索引从元组数组更改为多索引对象。在</p>
^{pr2}$
<p>最后一步是从
多索引,为每个工作日创建列,并将工作日编号替换为缩写,以提高可读性。在</p>
<pre><code>In [102]: dofw = "Mon Tue Wed Thu Fri Sat Sun".split()
In [103]: grid = daily.unstack('D').rename(columns=lambda x: dofw[x-1])
In [104]: grid
Out[104]:
Mon Tue Wed Thu Fri Sat Sun
W
1 63 91 73 88 84 95 72
2 66 77 96 72 56 80 66
...
19 56 69 89 69 96 73 80
20 81 53 78 64 82 53 63
</code></pre>
<p>要为每周创建一个线图,请转置dataframe,这样列是周编号,行是工作日(注意,在上一步中,可以通过取消周编号而不是工作日来避免此步骤),并调用<code>plot</code>。在</p>
<pre><code>grid.T.plot()
</code></pre>