У меня есть DataFrame (данные) с одним столбцом, индексированный по упорядоченным датам, и я хочу создать второй DataFrame с p столбцами и назначить каждому столбцу смещенную версию данных. Я хочу видеть в первом столбце data.shift (1), во втором столбце data.shift (2) и т. Д. Моя реализация выглядит следующим образом:
lagged_data = pd.DataFrame(index = data.index, columns=[i+1 for i in range(p)])
for i in range(p):
lagged_data.iloc[:,i] = data.shift(i+1)
Однако после выполнения обновляется только первый столбец, а все остальные остаются заполненными np.nan. Ниже результат (с p = 3):
print(lagged_data.head())
1 2 3
Date
gen-75 NaN NaN NaN
feb-75 0.03 NaN NaN
mar-75 0.04 NaN NaN
apr-75 -0.04 NaN NaN
mag-75 0.04 NaN NaN
Как ни странно, повторяя один и тот же цикл, все столбцы заполняются правильно. Я действительно не вижу причины такого поведения, я также пытался создать копию, выполнив
lagged_data.iloc[:,i] = data.shift(i+1).copy()
но это дает тот же результат, что и раньше