Pandas使用班次重复列

时间:2015-06-04 13:13:20

标签: python pandas

我有一个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)

但是这只是将时间序列添加到第一个时间序列的末尾,它不会创建新列。

1 个答案:

答案 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