擅长:python、mysql、java
<p><strong><code>shift</code></strong>返回数据帧的副本,它不会修改它,因此没有必要创建副本。在</p>
<p>您可以通过使用列表理解进一步清理代码,并使用一些代数将每列移动两个而不是一个。在</p>
<pre><code>x = np.random.randint(1, 10, 10)
df = pd.DataFrame(x)
dfs = [df.shift(-(2+2*i)) for i in range(3)]
pd.concat([df, *dfs], axis=1)
0 0 0 0
0 3 1.0 3.0 8.0
1 9 1.0 6.0 8.0
2 1 3.0 8.0 1.0
3 1 6.0 8.0 9.0
4 3 8.0 1.0 NaN
5 6 8.0 9.0 NaN
6 8 1.0 NaN NaN
7 8 9.0 NaN NaN
8 1 NaN NaN NaN
9 9 NaN NaN NaN
</code></pre>
<p>这种方法确实为每个列保留了相同的列标题,您可以使用类似的方法进行修复:</p>
^{pr2}$