Итеративно подгонять линию регрессии на подмножестве панд DataFrame - векторизованное решение? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь объединить панды DataFrame и создать 2 новых столбца, которые будут иметь наклон и перехват из простого линейного регрессионного соответствия.

Фиктивный набор данных выглядит следующим образом:

CustomerID   Month  Value
a                1     10
a                2     20
a                3     20
b                1     30
b                2     40
c                1     80
c                2     90

И я хочу, чтобы выходные данные выглядели так - что бы регрессировать Value против Month для каждого CustomerID:

CustomerID    Slope   Intercept
a              0.30          10
b              0.20          30
c              0.12          80

Я знаю, что мог бы запустить цикла затем для каждого customerID запустите модель линейной регрессии, но мой набор данных огромен, и мне нужен векторизованный подход.Я пытался использовать groupby и apply, передавая функцию линейной регрессии, но не нашел решения, которое бы сработало.

Заранее спасибо!

1 Ответ

0 голосов
/ 18 октября 2018

Используя scpiy с groupby, я использую цикл вместо применения, поскольку apply медленнее, чем для цикла

from scipy import stats

pd.DataFrame.from_dict({y:stats.linregress(x['Month'],x['Value'])[:2] for y, x in df.groupby('CustomerID')},'index').\
     rename(columns={0:'Slope',1:'Intercept'})
Out[798]: 
   Slope  Intercept
a    5.0   6.666667
b   10.0  20.000000
c   10.0  70.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...