1

我正在 Jupyter 笔记本中使用 Statsmodels 进行线性回归。数据位于名为“train_base”的 DataFrame 中,其中 id 列标识了我的数据库的每个唯一主题。train_base 是这样的:

id     y     x0     x1     x2
a123   20     8      1      3
b789   33     8      3      2
d782   77     9      6      5      

主要代码块如下所示。请注意,我正在使用另一个名为“test_base”的基础进行预测,并且该基础也具有与“train_base”相同的结构,除了“y”列:

results = smf.ols('y ~ x0 + x1 + x2', data=train_base).fit()
predictions = results.predict(test_base)
predictions.head()

预测是这样的:

0   -0.054789
1   -0.036042
2   -0.043962
3   -0.135725
4   -0.409129
dtype: float64

在我看来,预测中显示的第一列是原始 train_base 的索引(我正确吗?)。由于我需要确定我的测试库中每个人的预测值,我必须做什么才能在预测中包含“id”列?

4

2 回答 2

1

在@Leda Grasiele 的回答中进行了一些细微的更正(包括内部方括号和使用转置函数),我得到了正确的代码,如下所示:

predict = pd.DataFrame([results.predict(test_base), train_base['id']]).T
predict.columns = ['predictions', 'id']
predict
于 2019-02-28T10:55:26.493 回答
0

首先:是的,id 列是一个索引。第二:我无权访问您的数据来测试我的建议,但我认为以下方法可能有效(或类似的方法):

predict = pd.DataFrame(results.predict(test_base), train_base['id'])
predict.columns = ['predict']
predict

我认为如果您的预测中出现的每个值都与每个 id 索引相关,这可以工作,因为此代码的目的是创建一个由预测结果和 id 索引组成的数据框。

于 2019-02-27T00:25:48.950 回答