Pandas 以x值为指标的数据帧线性回归

Pandas 以x值为指标的数据帧线性回归,pandas,dataframe,data-fitting,Pandas,Dataframe,Data Fitting,我有一个数据帧df: [250 rows x 120 columns] 0 1 2 3 4 5 \ lag time [s] 0.041667 0.038638 0.193427 0.126253 0.058737 0.122129

我有一个数据帧
df

[250 rows x 120 columns]
                    0         1         2         3         4         5   \
lag time [s]                                                               
0.041667      0.038638  0.193427  0.126253  0.058737  0.122129  0.117425   
0.083333      0.104397  0.323418  0.390540  0.194786  0.247005  0.242796   
0.125000      0.168620  0.577642  0.782489  0.389399  0.381930  0.325373   
0.166667      0.241057  0.912038  1.361542  0.560007  0.346316  0.343614   
0.208333      0.246506  0.636547  1.863711  0.767916  0.487872  0.203043   
...
我需要用
x=df.index.values
拟合每个列的滞后时间

某些列可能包含NaN,并希望在
pd.DataFrame({'column':[],'slope':[],'stderr':[]})

我可以单独提取
x
y
数据,并使用numpy
fitline()
对数据进行拟合,但在我看来这很乏味


是否有更好的方法使用panda ols完成此工作?

是否需要保留滞后时间作为索引?最简单的方法可能是将其作为列合并到dataframe中,并使用statsmodels的公式接口:

import statsmodels.formula.api as sm

df2 = df.reset_index()

modres = {}
for colname in df2.drop('index', axis=1).columns:
    mod = sm.ols(formula=colname+' ~ index', data=df2)
    modres[colname] = mod.fit()
您要求提供列表的数据框架,但我认为保留每个回归的整个结果对象比丢弃大部分信息更有意义。我的建议保存了一本回归结果字典。要访问
y1~x
回归的系数和标准误差,您需要编写
modres['y1'].params
modres['y1'].bse


如果你对对象进行反思,你会发现你可以从每个结果对象中获取AIC、t-stats等。您还可以将它们传递给许多其他的
statsmodels
函数,用于预测、回溯等。

谢谢您的快速回答。没问题,只要告诉我您是否需要这些,我就可以调整它。重置会在我的df中添加一列,但我对ols公式感到困惑。我需要x作为滞后时间,每隔一列拟合一次,以获得每列的单独拟合。我应该如何定义我的模型?我可以成功地在df.iterkv():mod=sm.ols(formula='timeseries~x',data=df)res=mod.fit()res.summary()中为(列名称,timeseries)做:x=im.index.values#抱歉,我第一次没有仔细阅读你的问题。你的方法很好,我已经修改了我的答案,以提供更接近你想要的东西。