Вы пытались использовать встроенную функцию автокорра от Pandas?
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.autocorr.html
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([np.arange(1,10), np.arange(10, 1, -1)]), index=['a', 'b'])
df
0 1 2 3 4 5 6 7 8
a 1 2 3 4 5 6 7 8 9
b 10 9 8 7 6 5 4 3 2
df.loc['a'].autocorr(lag=1)
ИЛИ df.T['a'].autocorr(lag=1)
В вашем коде похоже, что вы посылаете одну и ту же строку каждый раз.
df.loc[0] == df.T[0] # The first row of the DataFrame
Вы перебираете строки DataFrame, но не используете свои итераторы
autocorr(df.T[0], 1)[0, 1]
Если вы предпочитаете использовать свою функцию, попробуйте изменить ее на
autocorr(row, 1)[0, 1]
, вместо этого вы можете использовать:
row.autocorr(lag=t)
Поскольку вы выполняете итерации по строкам DataFrame, переменная index будет содержать индекс строки из DF, а переменная row будет содержать тип Series всей строки.
Другая проблема:
df1['outpu1'] = value
Таким образом, вы присваиваете значение всему столбцу.
Если столбец уже существует, вы можете использовать loc:
df.loc[row_index, col_index] = value
Если столбец не существует, вы можете сначала вычислить весь столбец и сохранить его как серию, а затем назначить его всему списку или просто добавить его перед запуском цикла
df.insert(loc=0, column='output1' value='np.nan')