将 statsmodels 与 groupby 一起使用
using statsmodels with a groupby
考虑这个简单的例子
import pandas as pd
import statsmodels.formula.api as sm
df = pd.DataFrame({'Y' : [1,2,3,4,5,6,7],
'X' : [2,3,4,5,6,3,2],
'group' : ['a','a','a','a','b','b','b']})
df
Out[99]:
Y X group
0 1 2 a
1 2 3 a
2 3 4 a
3 4 5 a
4 5 6 b
5 6 3 b
6 7 2 b
我想运行按组回归。我只找到了非常古老的答案或带有循环的解决方案。我只是想知道为什么很简单:
df.groupby('group').agg(lambda x: sm.ols(formula = 'Y ~ X', data = x))
PatsyError: Error evaluating factor: NameError: name 'X' is not defined
Y ~ X
不起作用。我们可以使用最新版本的 Pandas (1.2.3) 做得更好吗?
谢谢!
您需要使用apply
函数-
df.groupby('group').apply(lambda x: sm.ols(formula = 'Y ~ X', data = x))
输出
group
a <statsmodels.regression.linear_model.OLS objec...
b <statsmodels.regression.linear_model.OLS objec...
dtype: object
您现在拥有适合每个组的模型并准备就绪。
考虑这个简单的例子
import pandas as pd
import statsmodels.formula.api as sm
df = pd.DataFrame({'Y' : [1,2,3,4,5,6,7],
'X' : [2,3,4,5,6,3,2],
'group' : ['a','a','a','a','b','b','b']})
df
Out[99]:
Y X group
0 1 2 a
1 2 3 a
2 3 4 a
3 4 5 a
4 5 6 b
5 6 3 b
6 7 2 b
我想运行按组回归。我只找到了非常古老的答案或带有循环的解决方案。我只是想知道为什么很简单:
df.groupby('group').agg(lambda x: sm.ols(formula = 'Y ~ X', data = x))
PatsyError: Error evaluating factor: NameError: name 'X' is not defined
Y ~ X
不起作用。我们可以使用最新版本的 Pandas (1.2.3) 做得更好吗? 谢谢!
您需要使用apply
函数-
df.groupby('group').apply(lambda x: sm.ols(formula = 'Y ~ X', data = x))
输出
group
a <statsmodels.regression.linear_model.OLS objec...
b <statsmodels.regression.linear_model.OLS objec...
dtype: object
您现在拥有适合每个组的模型并准备就绪。