You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中循环为多个DataFrame运行回归分析

批量处理年度回归分析的实现方案

我来帮你搞定这个批量回归的需求,核心思路就是先把分散的DataFrame统一管理,再循环处理每个年份的模型,下面是具体步骤和代码:

步骤1:导入必要的库

import pandas as pd
import statsmodels.api as sm

步骤2:整合所有年度DataFrame

手动逐个调用变量名太繁琐,我们可以通过年份范围生成变量名,再从全局命名空间中获取对应的DataFrame,存到字典里方便后续循环:

# 定义年份范围:2001到2016
years = range(2001, 2017)

# 把每个年份的DataFrame存入字典,键为年份,值为对应的DataFrame
df_dict = {year: globals()[f'CGdf_{year}'] for year in years}

这里的globals()函数可以获取当前全局环境中的变量,通过字符串拼接f'CGdf_{year}'就能精准定位到每个年度的DataFrame。

步骤3:循环执行回归并保存结果

接下来我们遍历字典中的每个年份和DataFrame,构建回归模型TSR_YYYY ~ sector profit,并可以把每个模型的结果存起来方便后续查看:

# 定义一个字典来保存每个年份的回归结果
reg_results = {}

for year, df in df_dict.items():
    # 提取因变量和自变量:因变量是TSR_YYYY,自变量是sector profit
    y = df[f'TSR_{year}']
    X = df['sector profit']
    # 给自变量添加常数项(statsmodels默认不包含截距)
    X = sm.add_constant(X)
    
    # 处理缺失值(可选但推荐,避免回归报错)
    df_clean = pd.concat([y, X], axis=1).dropna()
    y_clean = df_clean[f'TSR_{year}']
    X_clean = df_clean.drop(f'TSR_{year}', axis=1)
    
    # 构建并拟合OLS回归模型
    model = sm.OLS(y_clean, X_clean).fit()
    
    # 保存结果到字典
    reg_results[year] = model
    
    # 打印当前年份的回归摘要(可选,方便实时查看结果)
    print(f"===== {year}年回归结果 =====")
    print(model.summary())

如何查看单个年份的结果

如果之后想查看某一年的回归结果,直接从reg_results字典里取就行:

# 查看2005年的回归结果
print(reg_results[2005].summary())

# 提取某一年的系数
print("2005年回归系数:", reg_results[2005].params)

注意事项

  • 如果你的sector profit列名有特殊格式(比如下划线、大小写差异),代码里要严格对应,避免列名匹配错误。
  • 缺失值处理是可选步骤,但如果数据里存在NaN,不处理的话fit()方法会报错,所以建议加上dropna()。
  • 如果需要把所有回归结果导出成表格,可以用pd.concat把每个模型的参数合并成一个DataFrame:
# 把所有年份的回归系数合并成一个表格
coef_df = pd.DataFrame({year: res.params for year, res in reg_results.items()}).T
print(coef_df)

内容的提问来源于stack exchange,提问作者user3021495

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:18:48