Объединить результаты регрессии обратно в исходный фрейм данных - PullRequest
0 голосов
/ 07 июня 2019

Я работаю над простой линейной регрессией временных рядов с использованием 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

Буду очень признательна за любую помощь по возвращению этих результатов в исходный фрейм данных. Есть ряд других сообщений, которые соответствуют этой теме, но ни одно из решений не помогло мне в этом случае.

1 Ответ

0 голосов
/ 11 июня 2019

ОБНОВЛЕНИЕ:

Я решил это с помощью относительно простого метода, в котором я преобразовал серию в список, и просто установил новый столбец в кадре данных, равныйсписок.Тем не менее, мне было бы очень интересно узнать, есть ли у других лучшие / разные / уникальные решения этой проблемы.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...