google-cloud-platform - GCP 数据前向和后向填充
问题描述
我有下表,我试图在 GCP 数据准备中争吵:
Timestamp Event
2018-04-01 0
2018-04-02 0
2018-04-03 0
2018-04-04 0
2018-04-05 1
2018-04-06 0
2018-04-07 0
2018-04-08 0
我正在尝试以某种方式对其进行转换,如果 Event 为 1,则 Event 中的前 3 个条目设置为 1,Event 中的下 2 个条目设置为 2。
因此,基本上数据集在转换后将如下所示
Timestamp Event
2018-04-01 0
2018-04-02 1
2018-04-03 1
2018-04-04 1
2018-04-05 1
2018-04-06 2
2018-04-07 2
2018-04-08 0
我曾尝试使用窗口和条件来实现这一点,但没有成功。关于如何实现这种转变的任何想法?如果可以帮助实现此结果,我愿意拆分列或创建新的派生列。谢谢!
解决方案
您可以在IF语句中使用窗口函数作为条件的一部分。使用PREV和NEXT窗口函数,您可以获得窗口中当前行上方或下方 X 行的值。获得值后,您可以比较它们是否与预期值匹配并相应地塑造您的 IF 语句。
对于您的用例,您需要验证之前 1 或 2 位置的 PREV 值是否等于 1,并将这些行替换为数字 2。如果不正确,如果位置 1、2 或 3 的 NEXT 值等于1,行应替换为数字 1。最后,您需要检查当前行的值是否为 1,并将其余行替换为 0。将其转换为 Dataprep 接受的公式如下所示:
IF(PREV(Event, 1) == 1 || PREV(Event, 2) == 1, 2, IF(NEXT(Event, 1) == 1 || NEXT(Event, 2) == 1 || NEXT(Event, 3) == 1, 1, IF(Event == 1, 1, 0)))
要在 Dataprep 上输入此公式,请在“函数”选项卡下,选择“自定义公式”。在自定义公式窗口下,将公式类型设置为“多行公式”,因为 PREV 和 NEXT 函数需要一个额外的参数来指定要排序的列。
推荐阅读
- python - 以适当的方式在python中的csv文件中附加一个东西
- performance - 在 64 位 x64/Amd64 处理器上执行 8 位和 64 位指令的时序
- java - 对象在数据库单元测试中为空
- javascript - 从数组中选择一个值作为键并按该值分组
- r - 如何标记组织结构中的最低级别单位(由多个 LEVEL_ID 列表示)?
- scheme - 方案语法扩展引发“需要正确的列表”错误
- python - Is there a way to make a temporary list for this or fix the save results function?
- sql-server - Cannot Import DB using the Azure Portal
- android - Why RecyclerView still scrolls even after custom OnTouchListener implemented?
- spss - Can I search through and compare commonly named variables in SPSS?