python-3.x - 将回归结果合并回原始数据框
问题描述
我正在使用 statsmodels.api.OLS 进行简单的时间序列线性回归,并且正在基于标识符变量对数据组运行这些回归。我已经能够使分组回归工作,但现在我希望将回归的结果合并回原始数据帧并得到索引错误。
我的原始数据框的简化版本,我们称之为“df”,如下所示:
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
我进行回归的功能如下:
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 列分组。这段代码如下:
var = df.groupby('id').apply(ols_reg,
xcol='time',ycol='value')
这将返回与原始数据集长度相同的一系列预测线性值,如下所示:
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 开头的列(忽略值;不是实际输出)是具有回归预测值的列。正如函数的返回所示,这是一个熊猫系列。
我现在想将这些结果合并回原始数据框,如下所示:
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
我尝试了多种方法,例如在原始数据集中设置一个新列等于系列,但得到以下错误:
TypeError: incompatible index of inserted column with frame index
对于将这些结果恢复到原始数据框中的任何帮助,我们将不胜感激。还有许多与该主题相对应的其他帖子,但在这种情况下,没有一个解决方案对我有用。
解决方案
更新:
我用一种相对简单的方法解决了这个问题,我将系列转换为列表,并在数据框中设置一个新列等于列表。但是,我真的很想知道其他人是否有更好/不同/独特的解决方案来解决这个问题。谢谢!
推荐阅读
- ios - 如何检查当前 viewController 或根 viewController?
- objective-c - Tableviewcell如何为项目组提供备用单元格颜色
- google-sheets - Google 表格中财务数据的自定义聚合
- postman - 是否可以在本地使用预请求创建邮递员环境范围?
- ruby-on-rails - 在 Rails 中以不同语言保存输入字段
- python - Python 在布尔表达式中使用多个运算符
- php - 如何遍历 2 个数组并查找匹配/缺失值
- c++ - 如何知道推力::partition_copy 的结果中有多少元素
- javascript - 提交前如何确认一切是否有效?
- java - Array to Map:没有找到适合 Collectors.toMap 的方法