Я пытаюсь субдискретизировать фрейм данных в полярах, в котором есть столбец с метками времени. Я хочу уменьшить дискретизацию столбца до интервалов в 1 с. Но когда я делаю это с помощью groupby_dynamic, в результате появляются только те секунды, которые имеют значения. Но я хочу, чтобы результат содержал даже секунды, в которых нет записей, чтобы я мог пересылать заполнение.
Я попробовал groupby_dynamic, и, похоже, он не делает то, что я хочу.
taq_df.groupby_dynamic("timestamp", every = '1s').agg(pl.exclude("bestex_timestamp").last())






TLDR. Применение pl.DataFrame.upsample после агрегации заполнит недостающие временные метки.
Рассмотрим следующий пример кадра.
import polars as pl
from datetime import datetime
df = pl.DataFrame({
"timestamp": [
datetime(2024, 1, 1, 0, 0, 0, 0),
datetime(2024, 1, 1, 0, 0, 2, 5),
datetime(2024, 1, 1, 0, 0, 3, 0),
datetime(2024, 1, 1, 0, 0, 5, 1),
],
"value": [1, 2, 3, 4],
}).set_sorted("timestamp")
shape: (4, 2)
┌────────────────────────────┬───────┐
│ timestamp ┆ value │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞════════════════════════════╪═══════╡
│ 2024-01-01 00:00:00 ┆ 1 │
│ 2024-01-01 00:00:02.000005 ┆ 2 │
│ 2024-01-01 00:00:03 ┆ 3 │
│ 2024-01-01 00:00:05.000001 ┆ 4 │
└────────────────────────────┴───────┘
Простое применение pl.DataFrame.group_by_dynamic, как предложено в вопросе, приводит к следующему кадру данных (с отсутствующими метками времени для секунд 1 и 4).
(
df
.group_by_dynamic(index_column = "timestamp", every = "1s")
.agg(pl.col("value").last())
)
shape: (4, 2)
┌─────────────────────┬───────┐
│ timestamp ┆ value │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞═════════════════════╪═══════╡
│ 2024-01-01 00:00:00 ┆ 1 │
│ 2024-01-01 00:00:02 ┆ 2 │
│ 2024-01-01 00:00:03 ┆ 3 │
│ 2024-01-01 00:00:05 ┆ 4 │
└─────────────────────┴───────┘
Теперь применение pl.DataFrame.upsample заполняет недостающие временные метки. Все остальные столбцы будут иметь нулевые значения для новых строк.
df
.group_by_dynamic(index_column = "timestamp", every = "1s")
.agg(pl.col("value").last())
.upsample("timestamp", every = "1s")
)
shape: (6, 2)
┌─────────────────────┬───────┐
│ timestamp ┆ value │
│ --- ┆ --- │
│ datetime[μs] ┆ i64 │
╞═════════════════════╪═══════╡
│ 2024-01-01 00:00:00 ┆ 1 │
│ 2024-01-01 00:00:01 ┆ null │
│ 2024-01-01 00:00:02 ┆ 2 │
│ 2024-01-01 00:00:03 ┆ 3 │
│ 2024-01-01 00:00:04 ┆ null │
│ 2024-01-01 00:00:05 ┆ 4 │
└─────────────────────┴───────┘
Можете ли вы показать нам небольшой пример фрейма данных вместе с ожидаемым результатом?