Подготовка данных 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

Я пытаюсь преобразовать его таким образом, чтобы, если событие равно 1, предыдущие 3 записи в событии были установлены на 1, а следующие 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

Я пытался использовать окно и условные выражения для достижения этого, но безуспешно. Любые идеи о том, как это преобразование может быть достигнуто? Я открыт для разделения столбца или создания нового производного столбца, если это поможет достичь этого результата. Спасибо!


person FlyingPickle    schedule 15.08.2018    source источник
comment
В каждом случае предыдущие элементы будут разными датами? Если да, то все ли они разделены 1?   -  person James    schedule 02.10.2018


Ответы (1)


Вы можете использовать оконные функции как часть условий в своих операторах IF. . Использование PREV и NEXT оконных функций вы можете получить значения в X строк выше или ниже текущей строки в вашем окне. Получив значения, вы можете сравнить, соответствуют ли они ожидаемому значению, и соответствующим образом сформулировать оператор IF.

Для вашего варианта использования вам необходимо проверить, равно ли значение PREV в 1 или 2 предшествующей позиции единице, и заменить эти строки числом 2. Если это не так, если значение NEXT в позиции 1, 2 или 3 равно 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 требуется дополнительный аргумент, указывающий, по какому столбцу следует сортировать.

введите здесь описание изображения

person Atybzz    schedule 21.10.2018