Я работаю на большом фрейме данных Pyspark и не хочу использовать Pandas.
Мне удалось найти скользящее минимальное значение за 2 дня для каждого дня, используя следующий код :
w = (Window()
.partitionBy('DEVICE_ID2')
.orderBy(col('DATETIME').cast('long'))
.rangeBetween(-(24*60*60), 24*60*60))
df5 = df4.withColumn('MIN',F.min('VAL').over(w)).orderBy('ID','DATETIME').withColumn('MIN',F.when(col('DATETIME').rlike(r'\d{4}-\d{2}-\d{2} 00:00:00'),col('MIN')).otherwise(None))
Окно варьируется от -24 часов до + 24 часов после чтения в 00:00:00 каждый день.
Однако теперь я хочу иметь возможность узнать максимальное количество последовательных значений чтения, равное этому минимальному значению в течение каждого 2-дневного периода - показывается в столбце Conse c.
Пример кадра данных:
| ID| DATETIME| VAL| MIN|
| 1|2019-08-30 00:00:00| 1|null|
| 1|2019-08-30 02:00:00| 1|null|
| 1|2019-08-30 04:00:00| 262|null|
| 1|2019-08-30 06:00:00| 64|null|
| 1|2019-08-30 08:00:00| 75|null|
| 1|2019-08-30 10:00:00| 58|null|
| 1|2019-08-30 12:00:00| 55|null|
| 1|2019-08-30 14:00:00| 38|null|
| 1|2019-08-30 16:00:00| 29|null|
| 1|2019-08-30 18:00:00| 34|null|
| 1|2019-08-30 20:00:00| 1|null|
| 1|2019-08-30 22:00:00| 1|null|
| 1|2019-08-31 00:00:00| 1| 1|
| 1|2019-08-31 02:00:00| 71|null|
| 1|2019-08-31 04:00:00| 263|null|
| 1|2019-08-31 06:00:00| 51|null|
| 1|2019-08-31 08:00:00| 30|null|
| 1|2019-08-31 10:00:00| 52|null|
| 1|2019-08-31 12:00:00| 39|null|
| 1|2019-08-31 14:00:00| 48|null|
| 1|2019-08-31 16:00:00| 16|null|
| 1|2019-08-31 18:00:00| 58|null|
| 1|2019-08-31 20:00:00| 3|null|
| 1|2019-08-31 22:00:00| 3|null|
| 1|2019-09-01 00:00:00| 45| 3|
| 1|2019-09-01 02:00:00| 5|null|
| 1|2019-09-01 04:00:00| 278|null|
| 1|2019-09-01 06:00:00| 47|null|
| 1|2019-09-01 08:00:00| 25|null|
| 1|2019-09-01 10:00:00| 49|null|
| 1|2019-09-01 12:00:00| 31|null|
| 1|2019-09-01 14:00:00| 8|null|
| 1|2019-09-01 16:00:00| 6|null|
| 1|2019-09-01 18:00:00| 31|null|
| 1|2019-09-01 20:00:00| 24|null|
| 1|2019-09-01 22:00:00| 5|null|
| 1|2019-09-02 00:00:00| 7| 0|
| 1|2019-09-02 02:00:00| 4|null|
| 1|2019-09-02 04:00:00| 260|null|
| 1|2019-09-02 06:00:00| 63|null|
| 1|2019-09-02 08:00:00| 99|null|
| 1|2019-09-02 10:00:00| 85|null|
| 1|2019-09-02 12:00:00| 76|null|
| 1|2019-09-02 14:00:00| 92|null|
| 1|2019-09-02 16:00:00| 0|null|
| 1|2019-09-02 18:00:00| 10|null|
| 1|2019-09-02 20:00:00| 31|null|
| 1|2019-09-02 22:00:00| 1|null|
| 1|2019-09-03 00:00:00| 1|null|
Желаемый результат:
| ID| DATETIME| VAL| MIN|CONSEC
| 1|2019-08-30 00:00:00| 1|null|
| 1|2019-08-30 02:00:00| 1|null|
| 1|2019-08-30 04:00:00| 262|null|
| 1|2019-08-30 06:00:00| 64|null|
| 1|2019-08-30 08:00:00| 75|null|
| 1|2019-08-30 10:00:00| 58|null|
| 1|2019-08-30 12:00:00| 55|null|
| 1|2019-08-30 14:00:00| 38|null|
| 1|2019-08-30 16:00:00| 29|null|
| 1|2019-08-30 18:00:00| 34|null|
| 1|2019-08-30 20:00:00| 1|null|
| 1|2019-08-30 22:00:00| 1|null|
| 1|2019-08-31 00:00:00| 1| 1|3
| 1|2019-08-31 02:00:00| 71|null|
| 1|2019-08-31 04:00:00| 263|null|
| 1|2019-08-31 06:00:00| 51|null|
| 1|2019-08-31 08:00:00| 30|null|
| 1|2019-08-31 10:00:00| 52|null|
| 1|2019-08-31 12:00:00| 39|null|
| 1|2019-08-31 14:00:00| 48|null|
| 1|2019-08-31 16:00:00| 16|null|
| 1|2019-08-31 18:00:00| 58|null|
| 1|2019-08-31 20:00:00| 3|null|
| 1|2019-08-31 22:00:00| 3|null|
| 1|2019-09-01 00:00:00| 45| 3|2
| 1|2019-09-01 02:00:00| 5|null|
| 1|2019-09-01 04:00:00| 278|null|
| 1|2019-09-01 06:00:00| 47|null|
| 1|2019-09-01 08:00:00| 25|null|
| 1|2019-09-01 10:00:00| 49|null|
| 1|2019-09-01 12:00:00| 31|null|
| 1|2019-09-01 14:00:00| 8|null|
| 1|2019-09-01 16:00:00| 6|null|
| 1|2019-09-01 18:00:00| 31|null|
| 1|2019-09-01 20:00:00| 24|null|
| 1|2019-09-01 22:00:00| 5|null|
| 1|2019-09-02 00:00:00| 7| 0|1
| 1|2019-09-02 02:00:00| 4|null|
| 1|2019-09-02 04:00:00| 260|null|
| 1|2019-09-02 06:00:00| 63|null|
| 1|2019-09-02 08:00:00| 99|null|
| 1|2019-09-02 10:00:00| 85|null|
| 1|2019-09-02 12:00:00| 76|null|
| 1|2019-09-02 14:00:00| 92|null|
| 1|2019-09-02 16:00:00| 0|null|
| 1|2019-09-02 18:00:00| 10|null|
| 1|2019-09-02 20:00:00| 31|null|
| 1|2019-09-02 22:00:00| 1|null|
| 1|2019-09-03 00:00:00| 1|null|
Возможно ли это?
Большое спасибо