想要使用 Polars group_by_dynamic 对时间序列数据帧进行下采样,包括空箱

问题描述 投票:0回答:1

我正在尝试对极坐标中的数据帧进行下采样,该数据帧有一列带有时间戳。我想将列下采样到 1 秒的间隔。但是,当我使用 groupby_dynamic 执行此操作时,只有具有值的秒才会出现在结果中。但我希望结果包含没有条目的偶数秒,以便我可以转发填充。

我尝试了group_by_dynamic,但它似乎没有达到我想要的效果。

taq_df.groupby_dynamic("timestamp", every = '1s').agg(pl.exclude("bestex_timestamp").last())
python python-polars
1个回答
2
投票

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     │
└─────────────────────┴───────┘
© www.soinside.com 2019 - 2024. All rights reserved.