【发布时间】:2019-02-26 21:14:58
【问题描述】:
假设我有一个由以下列组成的数据集:
-
Stock_id: 股票的id -
Date:2018 年的日期,例如25/03/2018 -
Stock_value:该特定日期的股票价值
我有一些日期,每只股票都不同,这些日期在数据集中完全缺失,我想填写它们。
我所说的缺失日期是指这些日期中的每一个都没有一行;并不是说这些存在于数据集上,只是行中的Stock_value 是 NA 等。
一个限制是,一些股票在 2018 年的某个时间被引入股市,所以显然我不想在这些股票不存在时填写这些股票的日期。
我的意思是,如果一只股票在 2018 年 5 月 21 日被引入股市,那么显然我想填写该股票从 2018 年 5 月 21 日到 2018 年 12 月 31 日的任何缺失日期,但是日期不得早于 21/05/2018。
最有效的方法是什么?
我在 StackOverflow 上看到过一些帖子(post_1、post_2 等),但我认为我的情况比较特殊,所以我希望看到一种有效的方法。
让我举个例子。让我们将其仅限于两只股票,并且仅限于从 2018 年 1 月 1 日到 2018 年 7 月 1 日的那一周,否则它不适合这里。
假设我最初有以下内容:
Stock_id Date Stock_value
1 01/01/2018 124
1 02/01/2018 130
1 03/01/2018 136
1 05/01/2018 129
1 06/01/2018 131
1 07/01/2018 133
2 03/01/2018 144
2 04/01/2018 148
2 06/01/2018 150
2 07/01/2018 147
因此对于Stock_id = 1,缺少日期 04/01/2018。
对于Stock_id = 2,缺少 05/01/2018 日期,并且由于该股票的日期从 2018 年 3 月 1 日开始,因此不应填写此日期之前的日期(因为该股票是引入在 03/01/2018 的股票市场上)。
因此,我希望输出以下内容:
Stock_id Date Stock_value
1 01/01/2018 124
1 02/01/2018 130
1 03/01/2018 136
1 04/01/2018 NA
1 05/01/2018 129
1 06/01/2018 131
1 07/01/2018 133
2 03/01/2018 144
2 04/01/2018 148
2 05/01/2018 NA
2 06/01/2018 150
2 07/01/2018 147
【问题讨论】:
-
@jezrael,嗯,从我看来,是的,这回答了我的问题(尽管它有点太密集而无法立即理解)。但是,如果您还考虑到我在上面的帖子中描述的这种限制,您的解决方案是否有效:“限制是一些股票在 2018 年的某个时间被引入股市,所以显然我不想为这些填写日期库存,而这些库存不存在。”?我无法从阅读您的解决方案中真正看出;我可能只是简单地测试一下。
-
@jezrael,是的,我测试过。这绝对是错误的。它返回 2018 年的所有日期。实际上,由于您没有创建任何日期时间序列,因此它只返回它在数据集中看到的日期。因此,例如,如果数据集中完全缺少 21/05/2018 日期,那么它不会返回它,而应该返回它(至少对于该日期之后存在的股票)。
-
(这就是为什么我想我们不应该急于在此处将帖子标记为重复,但无论如何......)
-
@jezrael,首先我不是在处理股票,所以我也会给你一些虚构的数据。其次,数据没有什么令人惊讶的;您可以根据上面给出的描述自己创建一个小样本。当然,我可以创建这个样本来节省你一些时间,因为我提出这个问题,但我只是为了澄清原则上你可以自己创建一个小数据样本。
-
@jezrael,这是你的例子。这有帮助吗?