极地群体无法获取日期时间列的平均值

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

我有一个数据框,其中包含一列日期时间、一列浮点数和一列整数,如下所示:

┌─────────────────────────┬───────────┬─────────────┐
│ time                    ┆ NAV_DEPTH ┆ coarse_ints │
│ ---                     ┆ ---       ┆ ---         │
│ datetime[ms]            ┆ f64       ┆ i64         │
╞═════════════════════════╪═══════════╪═════════════╡
│ 2019-07-21 23:25:02.737 ┆ 3.424     ┆ 0           │
│ 2019-07-21 23:25:32.745 ┆ 2.514     ┆ 0           │
│ 2019-07-21 23:26:02.753 ┆ 2.514     ┆ 0           │
│ 2019-07-21 23:26:32.668 ┆ 2.323     ┆ 0           │
│ 2019-07-23 21:24:16.383 ┆ 3.17      ┆ 689         │
│ 2019-07-23 21:24:46.390 ┆ 3.213     ┆ 689         │
│ 2019-07-23 21:25:16.396 ┆ 3.361     ┆ 689         │
│ 2019-07-23 21:25:46.402 ┆ 3.403     ┆ 690         │
└─────────────────────────┴───────────┴─────────────┘

整数列用于将数据集分成 8 个样本的连续组以进行平均。我想对整数列执行 groupby 并获取每个整数的平均深度和日期时间。它适用于中位数

df.group_by('coarse_ints').median()

┌─────────────┬─────────────────────────┬───────────┐
│ coarse_ints ┆ time                    ┆ NAV_DEPTH │
│ ---         ┆ ---                     ┆ ---       │
│ i64         ┆ datetime[ms]            ┆ f64       │
╞═════════════╪═════════════════════════╪═══════════╡
│ 689         ┆ 2019-07-23 21:24:46.390 ┆ 3.213     │
│ 690         ┆ 2019-07-23 21:25:46.402 ┆ 3.403     │
│ 0           ┆ 2019-07-21 23:25:47.749 ┆ 2.514     │
└─────────────┴─────────────────────────┴───────────┘

但是使用平均值,日期时间全部变为空

df.group_by('coarse_ints').mean()

┌─────────────┬──────────────┬───────────┐
│ coarse_ints ┆ time         ┆ NAV_DEPTH │
│ ---         ┆ ---          ┆ ---       │
│ i64         ┆ datetime[ms] ┆ f64       │
╞═════════════╪══════════════╪═══════════╡
│ 0           ┆ null         ┆ 2.69375   │
│ 690         ┆ null         ┆ 3.403     │
│ 689         ┆ null         ┆ 3.248     │
└─────────────┴──────────────┴───────────┘

group_by_dynamic
看起来很有希望,但需要定期的时间间隔。我需要每 8 个样本取平均值,无论时间间隔如何。

datetime python-polars
1个回答
2
投票

如果您对日期时间的底层整数表示进行操作,然后在完成后进行强制转换,您可以通过常规

mean
获得
groupby
(我承认这有点不直观;)

df.with_column(
    pl.col('time').to_physical()
).groupby(
    by = pl.col('coarse_ints'),
    maintain_order = True  # or not :)
).mean().with_column(
    pl.col('time').cast( pl.Datetime('ms') )
)

请注意,从物理/整数表示转换回应包括原始时间单位(例如:“ms”、“us”、“ns”),以避免潜在的错误缩放。

© www.soinside.com 2019 - 2024. All rights reserved.