Cómo aplicar OLS de statsmodels a groupby

Estoy ejecutando OLS en productos por mes. Si bien esto funciona bien para un solo producto, mi dataframe contiene muchos productos. Si creo un groupby objeto OLS da un error.

linear_regression_df: product_desc period_num TOTALS 0 product_a 1 53 3 product_a 2 52 6 product_a 3 50 1 product_b 1 44 4 product_b 2 43 7 product_b 3 41 2 product_c 1 36 5 product_c 2 35 8 product_c 3 34 from pandas import DataFrame, Series import statsmodels.api as sm linear_regression_grouped = linear_regression_df.groupby(['product_desc']) X = linear_regression_grouped['period_num'] y = linear_regression_grouped['TOTALS'] model = sm.OLS(y, X) results = model.fit() 

Y recibo este error en la línea sm.OLS ():

 ValueError: unrecognized data structures:  

Entonces, ¿cómo puedo revisar mi dataframe y aplicar sm.OLS () para cada product_desc?

Podrías hacer algo como esto …

 import pandas as pd import statsmodels.api as sm for products in linear_regression_df.product_desc.unique(): tempdf = linear_regression_df[linear_regression_df.product_desc == products] X = tempdf['period_num'] y = tempdf['TOTALS'] model = sm.OLS(y, X) results = model.fit() print results.params # Or whatever summary info you want 

Use get_group para obtener cada grupo individual y realizar el modelo OLS en cada uno:

 for group in linear_regression_grouped.groups.keys(): df= linear_regression_grouped.get_group(group) X = df['period_num'] y = df['TOTALS'] model = sm.OLS(y, X) results = model.fit() print results.summary() 

Pero en el caso real, también desea tener el término de intercepción para que el modelo se defina de forma ligeramente diferente:

 for group in linear_regression_grouped.groups.keys(): df= linear_regression_grouped.get_group(group) df['constant']=1 X = df[['period_num','constant']] y = df['TOTALS'] model = sm.OLS(y,X) results = model.fit() print results.summary() 

Los resultados (con intercepción y sin) son, ciertamente, muy diferentes.