<p>这里有一种方法可以使用<code>numpy</code></p>
<p>输入:</p>
<pre><code>In [96]: df
Out[96]:
1 2 3 4 5 6
0
2011-05-31 68.433 81.696 75.083 66.659 68.898 72.622
2011-06-30 NaN 1.711 1.501 1.625 1.775 1.661
2011-07-31 NaN NaN 0.422 0.264 0.204 0.234
2011-08-31 NaN NaN NaN 1.077 1.227 1.521
2011-09-30 NaN NaN NaN NaN 0.667 0.496
</code></pre>
<p>代码</p>
^{pr2}$
<p>输出:</p>
<pre><code> 1 2 3 4 5 6
0
2011-05-31 68.433 81.696 75.083 66.659 68.898 72.622
2011-06-30 1.711 1.501 1.625 1.775 1.661 NaN
2011-07-31 0.422 0.264 0.204 0.234 NaN NaN
2011-08-31 1.077 1.227 1.521 NaN NaN NaN
2011-09-30 0.667 0.496 NaN NaN NaN NaN
</code></pre>
<p>让我们<code>timeit</code></p>
<pre><code>In [95]: %%timeit
....: roller = lambda (i, x): np.roll(x, -i)
....: row_terator = enumerate(df.values)
....: rolled = map(roller, row_terator)
....: result = DataFrame(np.vstack(rolled), index=df.index, columns=df.columns)
....:
10000 loops, best of 3: 101 us per loop
</code></pre>
<p>注意,<code>np.roll</code>是这里最重要的东西。它需要一个数组、一个整数位数的移位和一个<code>axis</code>参数,这样你就可以沿着它的任何一个轴移动<code>ndarray</code>。在</p>