Я работаю над простой линейной регрессией временных рядов с использованием statsmodels.api.OLS и запускаю эти регрессии для групп данных на основе переменной идентификатора. Мне удалось заставить работать сгруппированные регрессии, но теперь я хочу объединить результаты регрессий в исходный фрейм данных и получаю ошибки индекса.
Упрощенная версия моего исходного кадра данных, которую мы назовем «df», выглядит следующим образом:
id value time
a 1 1
a 1.5 2
a 2 3
a 2.5 4
b 1 1
b 1.5 2
b 2 3
b 2.5 4
Моя функция проводить регрессии следующая:
def ols_reg(df, xcol, ycol):
x = df[xcol]
y = df[ycol]
x = sm.add_constant(x)
model = sm.OLS(y, x, missing='drop').fit()
predictions = model.predict()
return pd.Series(predictions)
Затем я определяю переменную, которая хранит результаты выполнения этой функции в моем наборе данных, группируя по столбцу id. Этот код выглядит следующим образом:
var = df.groupby('id').apply(ols_reg,
xcol='time',ycol='value')
Возвращает серию предсказанных линейных значений, которая имеет ту же длину, что и исходный набор данных, и выглядит следующим образом:
id
a 0 0.5
1 1
2 2.5
3 3
b 0 0.5
1 1
2 2.5
3 3
Столбец, начинающийся с 0,5 (игнорируйте значения; не фактический результат), является столбцом с прогнозными значениями из регрессии. Как показывает возвращение функции, это серия панд.
Теперь я хочу объединить эти результаты обратно в исходный кадр данных, чтобы он выглядел следующим образом:
id value time results
a 1 1 0.5
a 1.5 2 1
a 2 3 2.5
a 2.5 4 3
b 1 1 0.5
b 1.5 2 1
b 2 3 2.5
b 2.5 4 3
Я пробовал несколько методов, таких как установка нового столбца в исходном наборе данных, равного серии, но получаю следующую ошибку:
TypeError: incompatible index of inserted column with frame index
Буду очень признательна за любую помощь по возвращению этих результатов в исходный фрейм данных. Есть ряд других сообщений, которые соответствуют этой теме, но ни одно из решений не помогло мне в этом случае.