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']))
Python pandas: как запустить множественную одномерную регрессию по группе