我有一个时间序列DataFrame,我想复制我的200个功能/列中的每一个作为额外的滞后功能.所以目前我在时间t有功能,想要在时间步t-1,t-2等创建功能.
我知道这最好用df.shift()完成,但我完全无法完成它.我还想将列重命名为'feature(t-1)','feature(t-2)'.
我的伪代码尝试将是这样的:
lagged_values = [1,2,3,10]
for every lagged_values
for every column, make a new feature column with df.shift(lagged_values)
make new column have name 'original col name'+'(t-(lagged_values))'
Run Code Online (Sandbox Code Playgroud)
最后,如果我有200列和4个滞后时间步,我会得到一个新的df,其中有1,000个特征(t,t-1,t-2,t-3和t-10分别为200个).
我找到了类似的东西,但它并没有按照机器学习掌握保留原始列名(重命名为var1,var2等).不幸的是,我不太清楚它是否足以将其修改为我的问题.
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
"""
Frame a time series as a supervised learning dataset.
Arguments:
data: Sequence of observations as a list or NumPy array.
n_in: Number of lag observations as input (X).
n_out: Number of observations as output (y).
dropnan: Boolean whether or not to drop rows with NaN values.
Returns:
Pandas DataFrame of series framed for supervised learning.
"""
n_vars = 1 if type(data) is list else data.shape[1]
df = DataFrame(data)
cols, names = list(), list()
# input sequence (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# forecast sequence (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
# put it all together
agg = concat(cols, axis=1)
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
return agg
Run Code Online (Sandbox Code Playgroud)
您可以使用字典理解创建其他列,然后通过它们将它们添加到数据框中assign
.
df = pd.DataFrame(np.random.randn(5, 2), columns=list('AB'))
lags = range(1, 3) # Just two lags for demonstration.
>>> df.assign(**{
'{} (t-{})'.format(col, t): df[col].shift(t)
for t in lags
for col in df
})
A B A (t-1) A (t-2) B (t-1) B (t-2)
0 -0.773571 1.945746 NaN NaN NaN NaN
1 1.375648 0.058043 -0.773571 NaN 1.945746 NaN
2 0.727642 1.802386 1.375648 -0.773571 0.058043 1.945746
3 -2.427135 -0.780636 0.727642 1.375648 1.802386 0.058043
4 1.542809 -0.620816 -2.427135 0.727642 -0.780636 1.802386
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1638 次 |
最近记录: |