您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python Pandas:如何按组运行多个单变量回归

Python Pandas:如何按组运行多个单变量回归

您传递给的函数apply必须以apandas.DataFrame作为第一个参数。您可以将其他关键字或位置参数apply传递给该参数或传递给应用函数。因此,您的示例将进行少量修改即可工作。更改ols_res

def ols_res(df, xcols,  ycol):
    return sm.OLS(df[ycol], df[xcols]).fit().predict()

然后,你可以使用groupbyapply喜欢这个

df.groupby('grp').apply(ols_res, xcols=['x1', 'x2'], ycol='y')

要么

df.groupby('grp').apply(ols_res, ['x1', 'x2'], 'y')

上面的代码没有 运行多个 单变量 回归。相反,它每组运行一个 多元 回归。但是(稍作修改)它将实现。

def ols_res(df, xcols,  ycol):
    return pd.DataFrame({xcol : sm.OLS(df[ycol], df[xcol]).fit().predict() for xcol in xcols})

虽然上述解决方案有效,但我认为以下内容更实用-

import statsmodels.api as sm
import pandas as pd
import numpy as np

df = pd.DataFrame({
  'y': np.random.randn(20),
  'x1': np.random.randn(20), 
  'x2': np.random.randn(20),
  'grp': ['a', 'b'] * 10})

def ols_res(x, y):
    return pd.Series(sm.OLS(y, x).fit().predict())

df.groupby('grp').apply(lambda x : x[['x1', 'x2']].apply(ols_res, y=x['y']))

由于某种原因,如果我ols_res()按原样定义,则结果DataFrame在索引中没有组标签

python 2022/1/1 18:44:36 有340人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶