我有一个pandas
时间序列对象,有3个系列和一个时间轴。我想训练一个带有时间窗口的神经网络,因此我需要创建一个具有不同移位的重复pandas列的矩阵。我可以手动使用pandas.concat
,但这需要很长时间才能完成并且它不会非常灵活。我现在尝试的是:
# Make 40 columns with the original dataframe first column and
# make 20 columns with the original dataframe second column
param_array = pandas.DataFrame()
for i in range(1, 41) :
param_array = pandas.concat([param_array, input[[0]].shift(i * 2)], axis=1, ignore_index=True)
for i in range(1, 21) :
param_array= pandas.concat([param_array, input[[1]].shift(i * 2)], axis=1, ignore_index=True)
但是这只是将时间序列添加到第一个时间序列的末尾,它不会创建新列。
答案 0 :(得分:3)
我怀疑您对'input [[0]]'的引用不正确。我得到一个示例,说明您正在尝试使用下面的代码。新列是原始数据的移位值:
import pandas as pd
d = {'one': pd.Series(range(20)),'two':pd.Series(range(20)[::-1])}
df = pd.DataFrame(d)
print df
param_array = pd.DataFrame()
for i in range(1, 5) :
param_array = pd.concat([param_array, df['one'].shift(i * 2)], axis=1, ignore_index=True)
for i in range(1, 5) :
param_array = pd.concat([param_array, df['two'].shift(i * 2)], axis=1, ignore_index=True)
print param_array
输出:
one two
0 0 19
1 1 18
2 2 17
3 3 16
4 4 15
5 5 14
6 6 13
7 7 12
8 8 11
9 9 10
10 10 9
11 11 8
12 12 7
13 13 6
14 14 5
15 15 4
16 16 3
17 17 2
18 18 1
19 19 0
0 1 2 3 4 5 6 7
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 0 NaN NaN NaN 19 NaN NaN NaN
3 1 NaN NaN NaN 18 NaN NaN NaN
4 2 0 NaN NaN 17 19 NaN NaN
5 3 1 NaN NaN 16 18 NaN NaN
6 4 2 0 NaN 15 17 19 NaN
7 5 3 1 NaN 14 16 18 NaN
8 6 4 2 0 13 15 17 19
9 7 5 3 1 12 14 16 18
10 8 6 4 2 11 13 15 17
11 9 7 5 3 10 12 14 16
12 10 8 6 4 9 11 13 15
13 11 9 7 5 8 10 12 14
14 12 10 8 6 7 9 11 13
15 13 11 9 7 6 8 10 12
16 14 12 10 8 5 7 9 11
17 15 13 11 9 4 6 8 10
18 16 14 12 10 3 5 7 9
19 17 15 13 11 2 4 6 8