我有以下数据
foo
像这样:
group exog endog
A 1.2 0.23
A 1.3 0.34
A 1.4 0.45
B 1.5 0.56
B 1.6 0.67
B 1.7 0.78
C 1.8 0.89
C 1.9 1
C 2 1.11
我曾考虑过要从原始数据帧制作“子”数据帧,但我陷入了困境。 我应该去找类似的东西吗?
def regression(df, exog, endog):
import statsmodels.api as sm
reg2 = sm.OLS(endog=df[exog],
exog=df[endog],
missing='drop')
results = reg2.fit()
df_ols_coefs = results.params.to_frame().T
df_ols_coefs.columns = [str(col) + '_coef' for col in df_ols.columns]
return df_ols_coefs
? 解释真的会对我有帮助:D 谢谢!
答案 0 :(得分:1)
如果需要一些常规功能来处理,可以使用flexible groupby.apply:
def regression(df, exog, endog):
import statsmodels.api as sm
reg2 = sm.OLS(endog=df[exog],
exog=df[endog],
missing='drop')
results = reg2.fit()
df_ols_coefs = results.params.to_frame().T
#it seems typo - change to df_ols_coefs
df_ols_coefs.columns = [str(col) + '_coef' for col in df_ols_coefs.columns]
return df_ols_coefs
df1 = df.groupby('group').apply(regression, 'exog','endog')
print (df1)
endog_coef
group
A 0 3.633423
B 0 2.361952
C 0 1.892071
答案 1 :(得分:1)
您需要的是:
for name, df in df_orginal.groupby(['group']):
print(name)
# Do something with df
您要做的主要是按“组”列对数据进行分组。然后遍历各个组。 “名称”变量是您的组,例如1(或2或3)。 “ df”是一个DataFrame,其中包含与此组(1或2或3)相关的所有数据