Код: Выделить всё
In [1]: import polars
In [2]: polars.__version__
Out[2]: '0.16.9'
In [3]: df = (
...: polars.DataFrame(
...: data={
...: "timestamp": ["1970-01-01 00:00:00+01:00", "1970-01-01 01:00:00+01:00"],
...: "value": [1, 1],
...: }
...: )
...: .with_columns(
...: polars.col("timestamp").str.strptime(
...: polars.Datetime, fmt="%Y-%m-%d %H:%M:%S%:z"
...: )
...: )
...: .with_columns(
...: polars.col("timestamp").dt.convert_time_zone("UTC").alias("timestamp_utc")
...: )
...: )
In [4]: df
Out[4]:
shape: (2, 3)
┌────────────────────────────┬───────┬─────────────────────────┐
│ timestamp ┆ value ┆ timestamp_utc │
│ --- ┆ --- ┆ --- │
│ datetime[μs, +01:00] ┆ i64 ┆ datetime[μs, UTC] │
╞════════════════════════════╪═══════╪═════════════════════════╡
│ 1970-01-01 00:00:00 +01:00 ┆ 1 ┆ 1969-12-31 23:00:00 UTC │
│ 1970-01-01 01:00:00 +01:00 ┆ 1 ┆ 1970-01-01 00:00:00 UTC │
└────────────────────────────┴───────┴─────────────────────────┘
In [5]: df.groupby_dynamic(
...: index_column="timestamp", every="1d", closed="left"
...: ).agg(polars.col("value").count())
Out[5]:
shape: (2, 2)
┌────────────────────────────┬───────┐
│ timestamp ┆ value │
│ --- ┆ --- │
│ datetime[μs, +01:00] ┆ u32 │
╞════════════════════════════╪═══════╡
│ 1969-12-31 01:00:00 +01:00 ┆ 1 │
│ 1970-01-01 01:00:00 +01:00 ┆ 1 │
└────────────────────────────┴───────┘
In [6]: df.groupby_dynamic(
...: index_column="timestamp_utc", every="1d", closed="left"
...: ).agg(polars.col("value").count())
Out[6]:
shape: (2, 2)
┌─────────────────────────┬───────┐
│ timestamp_utc ┆ value │
│ --- ┆ --- │
│ datetime[μs, UTC] ┆ u32 │
╞═════════════════════════╪═══════╡
│ 1969-12-31 00:00:00 UTC ┆ 1 │
│ 1970-01-01 00:00:00 UTC ┆ 1 │
└─────────────────────────┴───────┘
При повторной выборке по дням, хотя счетчик верен при работе с часовым поясом UTC (столбец timestamp_utc), я думаю, что столбец со столбцом временной метки не такой, каким он должен был агрегировать две строки в 1970-01-01 00:00:00+01:00.
Я что-то не понимаю?
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/755 ... by-dynamic
Мобильная версия