如何有效地更改熊猫中DataFrame的数据布局?

Joa*_*wal 8 python pandas

我有一个DataFrame,其值分为两列,请参见表T1。希望按照表T2所示的方式重新排列值以创建数据布局。T2中的行是通过转置值的“滑动窗口”,将表T1中的列a向下移动而创建的。熊猫有什么聪明的方法可以有效地做到这一点吗?

T1              T2

 a | b           A |  B |  C | D
------          ---------------
41 | 5          41 | 42 | 43 | 7
42 | 6          42 | 43 | 44 | 8
43 | 7    -->   43 | 44 | 45 | 9
44 | 8          44 | 45 | .. | .
45 | 9          45 | .. | .. | .
.. | .          .. | .. | .. | .
.. | .          .. | .. | .. | .
Run Code Online (Sandbox Code Playgroud)

Qua*_*ang 5

您可以使用as_strided

from numpy.lib.stride_tricks import as_strided

window = 3
stride = df['a'].values.strides[0]

pd.DataFrame(as_strided(df['a'].values, 
                        shape=(len(df) - window + 1, window),
                        strides = (stride,stride))
            )
Run Code Online (Sandbox Code Playgroud)

输出:

     0   1   2
0   41  42  43
1   42  43  44
2   43  44  45
Run Code Online (Sandbox Code Playgroud)