Python 带有移动窗口的数据透视表

Python 带有移动窗口的数据透视表,python,pandas,Python,Pandas,从一个以X,Y,Z为变量的时间序列数据中,我想取N=5(可配置)个指令,并将其旋转或输出 前 输入数据 TS | X | Y | Z --------------- 1 1.1 2.1 3.1 2 1.2 2.2 3.2 3 1.3 2.3 3.3 4 1.4 2.4 3.4 5 1.5 2.5 3.5 6 1.6 2.6 3.6 7 1.7 2.7 3.7 8 1.8 2.8 3.8 9 1.9 2.9 3.9 10 2 3 4 .. ..

从一个以X,Y,Z为变量的时间序列数据中,我想取N=5(可配置)个指令,并将其旋转或输出

前 输入数据

TS | X | Y |    Z
---------------
1   1.1 2.1 3.1
2   1.2 2.2 3.2
3   1.3 2.3 3.3
4   1.4 2.4 3.4
5   1.5 2.5 3.5
6   1.6 2.6 3.6
7   1.7 2.7 3.7
8   1.8 2.8 3.8
9   1.9 2.9 3.9
10  2   3   4
..  ..  ..  ..

----------------
输出将是X

TS  X_1 X_2 ..  X_5     Y_1,Y2  ... Y_5..Z_5
--------------------------------------------
1   1.1 1.2     1.5     2.1,2.2..   ..  3.5
2   1.2 1.3     1.6     2.2,    ..  .. .3.6
3   1.3 .. ..  .Na ..  ... .. Na
-------------------------------------------

考虑一个嵌套循环解决方案,该解决方案涉及移动行子集的
.loc
pivot\u table
,处理列名,
pd.concat
(垂直),然后再次移动
pd\u concat
(水平)

输出

print(final_df)
#    X_1  X_2  X_3  X_4  X_5  X_6  X_7  X_8  X_9  X_10  Y_1  Y_2  Y_3  Y_4  ...  Y_7  Y_8  Y_9  Y_10  Z_1  Z_2  Z_3  Z_4  Z_5  Z_6  Z_7  Z_8  Z_9  Z_10
# 0  1.1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9   2.0  2.1  2.2  2.3  2.4  ...  2.7  2.8  2.9   3.0  3.1  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9   4.0
# 1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2.0   NaN  2.2  2.3  2.4  2.5  ...  2.8  2.9  3.0   NaN  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.0   NaN
# 2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2.0  NaN   NaN  2.3  2.4  2.5  2.6  ...  2.9  3.0  NaN   NaN  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.0  NaN   NaN
# 3  1.4  1.5  1.6  1.7  1.8  1.9  2.0  NaN  NaN   NaN  2.4  2.5  2.6  2.7  ...  3.0  NaN  NaN   NaN  3.4  3.5  3.6  3.7  3.8  3.9  4.0  NaN  NaN   NaN
# 4  1.5  1.6  1.7  1.8  1.9  2.0  NaN  NaN  NaN   NaN  2.5  2.6  2.7  2.8  ...  NaN  NaN  NaN   NaN  3.5  3.6  3.7  3.8  3.9  4.0  NaN  NaN  NaN   NaN
# 5  1.6  1.7  1.8  1.9  2.0  NaN  NaN  NaN  NaN   NaN  2.6  2.7  2.8  2.9  ...  NaN  NaN  NaN   NaN  3.6  3.7  3.8  3.9  4.0  NaN  NaN  NaN  NaN   NaN
# 6  1.7  1.8  1.9  2.0  NaN  NaN  NaN  NaN  NaN   NaN  2.7  2.8  2.9  3.0  ...  NaN  NaN  NaN   NaN  3.7  3.8  3.9  4.0  NaN  NaN  NaN  NaN  NaN   NaN
# 7  1.8  1.9  2.0  NaN  NaN  NaN  NaN  NaN  NaN   NaN  2.8  2.9  3.0  NaN  ...  NaN  NaN  NaN   NaN  3.8  3.9  4.0  NaN  NaN  NaN  NaN  NaN  NaN   NaN
# 8  1.9  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  2.9  3.0  NaN  NaN  ...  NaN  NaN  NaN   NaN  3.9  4.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
# 9  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  3.0  NaN  NaN  NaN  ...  NaN  NaN  NaN   NaN  4.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN

输出中的TS实际上是新的索引。它与输入中的TS不同,但实际上是列中的后缀数字。请发布您尝试的代码(因此不是一个代码编写服务)。@Parfait,如果您在输入中看到X列,在输出中看到X_1,它是相同的。因此,我们不需要重新设置TS索引。
print(final_df)
#    X_1  X_2  X_3  X_4  X_5  X_6  X_7  X_8  X_9  X_10  Y_1  Y_2  Y_3  Y_4  ...  Y_7  Y_8  Y_9  Y_10  Z_1  Z_2  Z_3  Z_4  Z_5  Z_6  Z_7  Z_8  Z_9  Z_10
# 0  1.1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9   2.0  2.1  2.2  2.3  2.4  ...  2.7  2.8  2.9   3.0  3.1  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9   4.0
# 1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2.0   NaN  2.2  2.3  2.4  2.5  ...  2.8  2.9  3.0   NaN  3.2  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.0   NaN
# 2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  2.0  NaN   NaN  2.3  2.4  2.5  2.6  ...  2.9  3.0  NaN   NaN  3.3  3.4  3.5  3.6  3.7  3.8  3.9  4.0  NaN   NaN
# 3  1.4  1.5  1.6  1.7  1.8  1.9  2.0  NaN  NaN   NaN  2.4  2.5  2.6  2.7  ...  3.0  NaN  NaN   NaN  3.4  3.5  3.6  3.7  3.8  3.9  4.0  NaN  NaN   NaN
# 4  1.5  1.6  1.7  1.8  1.9  2.0  NaN  NaN  NaN   NaN  2.5  2.6  2.7  2.8  ...  NaN  NaN  NaN   NaN  3.5  3.6  3.7  3.8  3.9  4.0  NaN  NaN  NaN   NaN
# 5  1.6  1.7  1.8  1.9  2.0  NaN  NaN  NaN  NaN   NaN  2.6  2.7  2.8  2.9  ...  NaN  NaN  NaN   NaN  3.6  3.7  3.8  3.9  4.0  NaN  NaN  NaN  NaN   NaN
# 6  1.7  1.8  1.9  2.0  NaN  NaN  NaN  NaN  NaN   NaN  2.7  2.8  2.9  3.0  ...  NaN  NaN  NaN   NaN  3.7  3.8  3.9  4.0  NaN  NaN  NaN  NaN  NaN   NaN
# 7  1.8  1.9  2.0  NaN  NaN  NaN  NaN  NaN  NaN   NaN  2.8  2.9  3.0  NaN  ...  NaN  NaN  NaN   NaN  3.8  3.9  4.0  NaN  NaN  NaN  NaN  NaN  NaN   NaN
# 8  1.9  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  2.9  3.0  NaN  NaN  ...  NaN  NaN  NaN   NaN  3.9  4.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN
# 9  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  3.0  NaN  NaN  NaN  ...  NaN  NaN  NaN   NaN  4.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN