Полярные значения — подсчет уникальных значений за период времени.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Полярные значения — подсчет уникальных значений за период времени.

Сообщение Anonymous »

Я перевожу конвейер с панд на поляры, данные по приходам и отправлениям фур, пристыкованных к складу, на определенном этапе конвейера мне нужно посчитать количество грузовики, которые пристыкованы в любой момент времени, то есть для каждой строки (пристыкованный грузовик) мне нужно рассчитать количество уникальных грузовиков («ID»), которые находятся во временном окне (- 1 минута времени прибытия и + 1 минута времени отправления). Я до сих пор не нашел эффективного метода, который не основан на применении функции построчно (стиль pandas).
data = pl.from_repr("""
┌─────────────────────┬─────────────────────┬─────┐
│ arrival_time ┆ departure_time ┆ ID │
│ --- ┆ --- ┆ --- │
│ datetime[μs] ┆ datetime[μs] ┆ str │
╞═════════════════════╪═════════════════════╪═════╡
│ 2023-01-01 06:23:47 ┆ 2023-01-01 06:25:08 ┆ A1 │
│ 2023-01-01 06:26:42 ┆ 2023-01-01 06:28:02 ┆ A1 │
│ 2023-01-01 06:30:20 ┆ 2023-01-01 06:35:01 ┆ A5 │
│ 2023-01-01 06:32:06 ┆ 2023-01-01 06:33:48 ┆ A6 │
│ 2023-01-01 06:33:09 ┆ 2023-01-01 06:36:01 ┆ B3 │
│ 2023-01-01 06:34:08 ┆ 2023-01-01 06:39:49 ┆ C3 │
│ 2023-01-01 06:36:40 ┆ 2023-01-01 06:38:34 ┆ A6 │
│ 2023-01-01 06:37:43 ┆ 2023-01-01 06:40:48 ┆ A5 │
│ 2023-01-01 06:39:48 ┆ 2023-01-01 06:46:10 ┆ A6 │
└─────────────────────┴─────────────────────┴─────┘
""")

Код, который у меня есть, первая часть написана в полярах, а последняя все еще использует pandas:
processed_data = (
data.sort(by=pl.col("arrival_time"))
.with_columns(
arrival_time_expanded=pl.col("arrival_time").dt.offset_by("-1m"),
departure_time_expanded=pl.col("departure_time").dt.offset_by("1m"),
)
.to_pandas()
)
processed_data = processed_data.assign(
docked_trucks=processed_data.apply(
lambda row: processed_data[
(processed_data.arrival_time_expanded = row.arrival_time)
]["ID"].nunique(),
axis=1,
)
)

Результат:
shape: (9, 6)
┌─────────────────────┬─────────────────────┬─────┬───────────────────────┬─────────────────────────┬───────────────┐
│ arrival_time ┆ departure_time ┆ ID ┆ arrival_time_expanded ┆ departure_time_expanded ┆ docked_trucks │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ datetime[ns] ┆ datetime[ns] ┆ str ┆ datetime[ns] ┆ datetime[ns] ┆ i64 │
╞═════════════════════╪═════════════════════╪═════╪═══════════════════════╪═════════════════════════╪═══════════════╡
│ 2023-01-01 06:23:47 ┆ 2023-01-01 06:25:08 ┆ A1 ┆ 2023-01-01 06:22:47 ┆ 2023-01-01 06:26:08 ┆ 1 │
│ 2023-01-01 06:26:42 ┆ 2023-01-01 06:28:02 ┆ A1 ┆ 2023-01-01 06:25:42 ┆ 2023-01-01 06:29:02 ┆ 1 │
│ 2023-01-01 06:30:20 ┆ 2023-01-01 06:35:01 ┆ A5 ┆ 2023-01-01 06:29:20 ┆ 2023-01-01 06:36:01 ┆ 4 │
│ 2023-01-01 06:32:06 ┆ 2023-01-01 06:33:48 ┆ A6 ┆ 2023-01-01 06:31:06 ┆ 2023-01-01 06:34:48 ┆ 4 │
│ 2023-01-01 06:33:09 ┆ 2023-01-01 06:36:01 ┆ B3 ┆ 2023-01-01 06:32:09 ┆ 2023-01-01 06:37:01 ┆ 4 │
│ 2023-01-01 06:34:08 ┆ 2023-01-01 06:39:49 ┆ C3 ┆ 2023-01-01 06:33:08 ┆ 2023-01-01 06:40:49 ┆ 4 │
│ 2023-01-01 06:36:40 ┆ 2023-01-01 06:38:34 ┆ A6 ┆ 2023-01-01 06:35:40 ┆ 2023-01-01 06:39:34 ┆ 4 │
│ 2023-01-01 06:37:43 ┆ 2023-01-01 06:40:48 ┆ A5 ┆ 2023-01-01 06:36:43 ┆ 2023-01-01 06:41:48 ┆ 3 │
│ 2023-01-01 06:39:48 ┆ 2023-01-01 06:46:10 ┆ A6 ┆ 2023-01-01 06:38:48 ┆ 2023-01-01 06:47:10 ┆ 3 │
└─────────────────────┴─────────────────────┴─────┴───────────────────────┴─────────────────────────┴───────────────┘


Подробнее здесь: https://stackoverflow.com/questions/764 ... ime-period
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»