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

如何将多列对固定列的循环回归结果存储到新DataFrame?

我看你已经搞定了多列和固定列的循环OLS回归,现在就差把每次的关键结果存下来不被覆盖对吧?你的核心思路没问题,但字典的写法有点小问题,导致没法正确存储结果。我给你修正一下代码,顺便说清楚关键点:

修正后的代码实现

首先,我们要把每次回归的结果用键值对字典的形式明确存储,再逐个追加到结果列表里,这样就不会被下一次迭代覆盖:

import pandas as pd
import statsmodels.api as sm

# 初始化空列表用于存储所有回归结果
WTI_results = []

# 遍历前13列(索引0到12)
for i in range(13):
    # 提取当前列作为因变量,WTI_price作为自变量
    y = df_opec.iloc[0:39, i]
    X = df_opec['WTI_price']
    
    # 注意:如果需要给回归加截距项,把X改成下面这行
    # X = sm.add_constant(df_opec['WTI_price'])
    
    # 拟合OLS模型
    OLSWTI = sm.OLS(y, X).fit()
    
    # 构造清晰的结果字典:用明确的键名对应每个指标
    result_dict = {
        '变量名称': df_opec.columns[i],
        '回归系数': OLSWTI.params.iloc[0],  # 加截距后需调整索引为0或1
        'R²值': OLSWTI.rsquared,
        'P值': OLSWTI.pvalues.iloc[0]
    }
    
    # 将当前结果追加到列表中,避免被下一次循环覆盖
    WTI_results.append(result_dict)

# 可选:把结果转成DataFrame,方便查看/筛选/导出
results_df = pd.DataFrame(WTI_results)
print(results_df)
关键说明
  1. 字典格式修正:你之前的字典写法{[df_opec.columns[i]],[OLSWTI.params], ...}是错误的,必须用键: 值的键值对形式,这样每个结果的含义清晰,后续提取也方便。
  2. 结果持久化:每次循环用append()把字典加入列表,相当于把每一次的回归结果“存档”,不会被下一次迭代覆盖。
  3. 截距项处理:如果你的回归需要包含截距,记得用sm.add_constant()处理自变量,此时params和pvalues会有两个值(截距和系数),你可以根据需求提取对应索引的值。
更灵活的优化方案

如果你的列数不是固定的13,或者想自动排除WTI_price列避免重复回归,可以改成遍历列名的方式:

WTI_results = []
# 遍历除WTI_price外的所有列
for col in df_opec.columns.drop('WTI_price'):
    y = df_opec.loc[0:38, col]  # iloc[0:39]对应行索引0到38,loc写法要匹配
    X = df_opec['WTI_price']
    OLSWTI = sm.OLS(y, X).fit()
    
    result_dict = {
        '变量名称': col,
        '回归系数': OLSWTI.params.iloc[0],
        'R²值': OLSWTI.rsquared,
        'P值': OLSWTI.pvalues.iloc[0]
    }
    WTI_results.append(result_dict)

这样就不用硬编码列数,适配更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:11