Python pandas: как распаковать результаты statsmodel и создать столбец в группе по датафрейму - PullRequest
0 голосов
/ 20 февраля 2020

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

df2 = pd.DataFrame.from_dict({'case': ['foo', 'foo', 'foo', 'bar', 'bar'],
                                 'cluster': [1, 1, 1, 1, 1],
                                 'conf': [1, 2, 3, 1, 4],
                                'conf_1': [11, 12, 13, 11, 14]}) 

def ols_res(df, xcols,  ycol):
    results =  sm.OLS(df[ycol], sm.add_constant(df[xcols])).fit()
    return results.get_influence().cooks_distance[0]

df3 = df2.groupby(['case', 'cluster'])

df3.apply(ols_res, xcols='conf', ycol='conf_1')

вывод, который я получил:

case  cluster
bar   1                                                 [nan, nan]
foo   1          [0.42857142857143005, 0.09642857142857146, 10....
dtype: object

Размер результатов для каждой группы такой же, как число строк в группе. Мне нужен вышеуказанный вывод в следующем формате. Может кто-нибудь, пожалуйста, помогите мне?

    case    cluster conf    conf_1   result
0   foo      1       1       11      0.42857142857143005
1   foo      1       2       12      0.09642857142857146
2   foo      1       3       13      10....
4   bar      1       1       11      nan
5   bar      1       4       14      nan

1 Ответ

0 голосов
/ 20 февраля 2020

подписка сработала для меня.

def ols_res_mod(df, xcols,  ycol):
    results =  sm.OLS(df[ycol], sm.add_constant(df[xcols])).fit()
    results.get_influence().cooks_distance[0]
    print(df)
    df['distance'] = results.get_influence().cooks_distance[0]
    return df

не уверен, эффективный ли это способ или нет.

...