首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将回归结果合并回原始数据帧

将回归结果合并回原始数据帧
EN

Stack Overflow用户
提问于 2019-06-07 23:42:36
回答 2查看 580关注 0票数 0

我正在使用statsmodels.api.OLS进行简单的时间序列线性回归,并基于标识符变量对数据组运行这些回归。我已经能够使分组的回归工作,但现在我希望将回归的结果合并回原始数据帧中,并得到索引错误。

我的原始数据帧的简化版本,我们称之为"df“,如下所示:

代码语言:javascript
复制
id    value    time
a      1        1
a      1.5      2
a      2        3
a      2.5      4
b      1        1
b      1.5      2
b      2        3
b      2.5      4

我执行回归的功能如下:

代码语言:javascript
复制
def ols_reg(df, xcol, ycol):
   x = df[xcol]
   y = df[ycol]
   x = sm.add_constant(x)
   model = sm.OLS(y, x, missing='drop').fit()
   predictions = model.predict()
   return pd.Series(predictions)

然后,我定义一个变量来存储在我的数据集上执行此函数的结果,并按id列进行分组。代码如下:

代码语言:javascript
复制
var = df.groupby('id').apply(ols_reg, 
    xcol='time',ycol='value')

这将返回与原始数据集具有相同长度的一系列预测线性值,如下所示:

代码语言:javascript
复制
id
a   0  0.5
    1  1
    2  2.5
    3  3
b   0  0.5
    1  1
    2  2.5
    3  3

以0.5开头的列(忽略这些值,而不是实际输出)是包含回归预测值的列。正如函数的返回值所示,这是一个熊猫系列。

我现在想将这些结果合并回原始数据帧中,如下所示:

代码语言:javascript
复制
id    value    time   results
a      1        1      0.5
a      1.5      2       1
a      2        3      2.5
a      2.5      4       3
b      1        1      0.5
b      1.5      2       1
b      2        3      2.5
b      2.5      4       3

我尝试了许多方法,例如在原始数据集中设置一个等于序列的新列,但得到以下错误:

代码语言:javascript
复制
TypeError: incompatible index of inserted column with frame index

任何将这些结果返回到原始数据框架的帮助都将不胜感激。还有许多其他帖子与此主题相对应,但在这种情况下,没有一个解决方案对我有效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-11 05:39:01

更新:

我已经用一个相对简单的方法解决了这个问题,在这个方法中,我将序列转换为一个列表,然后在数据帧中设置一个等于该列表的新列。然而,我真的很想知道其他人是否对这个问题有更好的/不同的/独特的解决方案。谢谢!

票数 0
EN

Stack Overflow用户

发布于 2020-01-26 01:45:00

要在缺少值中插入预测时不松开位置,可以使用此方法,例如:

  • X_train:训练数据是与已知真实结果相对应的熊猫数据帧(在y_train).
  • X_test:中,测试数据是没有对应的已知真实结果的熊猫数据帧)。需要predict.
  • y_train:的训练数据是pandas系列与真实已知的results
  • Prediction:预测是pandas系列对象

要将完整的数据合并到一个pandas dataframe中,首先要将已知部分组合在一起:

代码语言:javascript
复制
# merge train part of the data into a dataframe    
X_train = X_train.sort_index()
    y_train = y_train.sort_index()
    result = pd.concat([X_train,X_test])

# if need to convert numpy array to pandas series: 
# prediction = pd.Series(prediction)


# here is the magic
result['specie'][result['specie'].isnull()] = prediction.values

如果没有缺失值,就可以完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56497509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档