Pandas使用偏移量复制列

4

我有一个包含三个系列和时间轴的 pandas 时间序列对象。我想要用一个时间窗口来训练神经网络,因此我需要创建一个由重复的 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
很难理解你的问题是什么:请参考 [ask]。 - boardrider
有几种方法可以将列附加到pandas数据框中。一种方法是df ["new_column"] = ts,其中df是数据框,ts是某种系列对象(列表、numpy数组等)。 - user3371637
boardrider: 我认为从我的原始pandas数据集中“创建重复的pandas列矩阵”相当描述性。如果您认为您可以更好地表达它,请随意编辑。 - Pedro Montoto García
1个回答

4
我怀疑你提到的 '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

如果您认为这是解决问题的方案,您可以接受答案吗? - Bobak Farzin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接