Python 使用shift键复制列

Python 使用shift键复制列,python,pandas,Python,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

我有一个带有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]]”的引用不正确。下面我举了一个例子,说明您正试图用自己的代码做什么。新列是原始数据的移位值:

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

很难理解您的问题是什么:请看,有一些方法可以将列附加到数据帧。一种方法可以是df[“new_column”]=ts,其中df是一个数据帧,ts是某种类型的系列对象(列表、numpy数组…)。boardrider:我相信从我的原始熊猫数据集“创建一个复制熊猫列矩阵”是非常具有描述性的。如果你相信你能把它写得更好,请随意编辑。如果你相信这是一个解决问题的方法,你能接受答案吗?