Python Pandas中按组执行回归分析并提取系数的技术问询
按分组执行回归并提取系数的解决方案
没问题,这事儿很容易搞定!咱们用Python的pandas配合statsmodels就能快速实现你要的需求,具体步骤如下:
1. 导入所需库
首先得把需要的工具库导入进来:
import pandas as pd import statsmodels.api as sm
2. 构造你的示例数据集
先把你给出的数据转换成DataFrame格式:
data = pd.DataFrame({ 'Group': [1,1,1,2,2,2], 'Y': [10,5,3,4,2,3], 'X': [6,4,1,6,4,9] })
3. 定义回归函数
咱们写一个小函数,用来对每个分组的数据执行线性回归,然后返回自变量X的系数:
def get_regression_coeff(group): # 添加截距项(statsmodels的OLS需要显式指定) X = sm.add_constant(group['X']) Y = group['Y'] # 拟合回归模型 model = sm.OLS(Y, X).fit() # 返回X的系数(注意:索引为1的是X的系数,0是截距) return pd.Series({'Group': group['Group'].iloc[0], 'Coefficient': model.params[1]})
4. 按分组应用函数并整理结果
用groupby按Group分组,然后把刚才的函数应用到每个分组上,最后整理成你要的格式:
result = data.groupby('Group').apply(get_regression_coeff).reset_index(drop=True)
5. 查看最终结果
运行完上面的代码后,打印result就能得到你预期的格式:
print(result)
输出结果(实际运行会得到真实的回归系数,这里用你假设的数值示例):
Group Coefficient 0 1 0.25 1 2 0.30
补充说明
- 如果你的数据集里有缺失值,记得先做缺失值处理(比如
data.dropna()),不然回归会报错 - 如果你不需要截距项,可以去掉
sm.add_constant()这一步,但通常线性回归都会包含截距 - 除了
statsmodels,你也可以用sklearn的LinearRegression,不过statsmodels的输出更偏向统计分析,提取系数也更直观
内容的提问来源于stack exchange,提问作者Khalid
相关产品推荐
相关产品推荐

