Я перевожу конвейер с панд на поляры, данные по приходам и отправлениям фур, пристыкованных к складу, на определенном этапе конвейера мне нужно посчитать количество грузовики, которые пристыкованы в любой момент времени, то есть для каждой строки (пристыкованный грузовик) мне нужно рассчитать количество уникальных грузовиков («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
Полярные значения — подсчет уникальных значений за период времени. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Полярные значения, суммируйте столбец на основе значений других столбцов в `group_by`
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Получите массив уникальных атрибутов/значений продукта по самой высокой цене в WooCommerce.
Anonymous » » в форуме Php - 0 Ответы
- 61 Просмотры
-
Последнее сообщение Anonymous
-