数据框熊猫中的迭代

时间:2018-08-07 17:50:47

标签: python pandas

我有以下数据

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 谢谢!

2 个答案:

答案 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)相关的所有数据