Макс в оконных функциях - PullRequest
0 голосов
/ 27 июня 2018

Входной DF:

id .  sub_id .   id_created .  id_last_modified   sub_id_created . lead_
1 .    10          12:00         7:00               12:00 .        1:00
1 .    20 .        12:00         7:00                1:00 .        2:30
1 .    30 .        12:00         7:00                2:30 .        7:00
1 .    40          12:00         7:05                7:00          null

Вариант использования, я пытаюсь создать новую_колонку "time", где:

1. For: (id, max(sub_id)) : id_last_modified - sub_id_created
2. otherwise:  sub_id_created - lead_

Код:

window = Window.partitionBy("id").orderBy("sub_id")

Я получаю ожидаемую операцию для всех строк, кроме комбинации:

(id, max(sub_id))

за который я получаю ноль

Любые предложения о том, где я иду не так, будут полезны. Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019
import pandas_datareader as web
import datetime
start = datetime.datetime(2018, 5, 1)
end = datetime.datetime(2019, 5, 31)
df = web.DataReader("goog", 'yahoo', start, end)
0 голосов
/ 24 апреля 2019

думаю, это может сработать

df = df.withColumn("time",
when($"sub_id"===max($"sub_id").over(window), 
(unix_timestamp($"id_last_modified")- 
unix_timestamp($"sub_id_created"))/3600.0).otherwise( 
(unix_timestamp($"sub_id_created") - 
unix_timestamp(lead($"sub_id_created", 1).over(window)))/3600.0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...