Python 带有移动窗口的数据透视表
从一个以X,Y,Z为变量的时间序列数据中,我想取N=5(可配置)个指令,并将其旋转或输出 前 输入数据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 .. ..
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