Множественные агрегации по нескольким столбцам в полярах PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Множественные агрегации по нескольким столбцам в полярах Python

Сообщение Anonymous »

Проверяя, как реализовать группирование с помощью полярных выражений Python, я могу легко вычислить агрегаты для отдельных столбцов:

Код: Выделить всё

import polars as pl
import numpy as np

t, v = np.arange(0, 100, 2), np.arange(0, 100, 2)
df = pl.DataFrame({"t": t, "v0": v, "v1": v})
df = df.with_columns((pl.datetime(2022,10,30) + pl.duration(seconds=df["t"])).alias("datetime")).drop("t")

df.group_by_dynamic("datetime", every="10s").agg(pl.col("v0").mean())

Код: Выделить всё

shape: (10, 2)
┌─────────────────────┬──────┐
│ datetime            ┆ v0   │
│ ---                 ┆ ---  │
│ datetime[μs]        ┆ f64  │
╞═════════════════════╪══════╡
│ 2022-10-30 00:00:00 ┆ 4.0  │
│ 2022-10-30 00:00:10 ┆ 14.0 │
│ 2022-10-30 00:00:20 ┆ 24.0 │
│ 2022-10-30 00:00:30 ┆ 34.0 │
│ ...                 ┆ ...  │
или вычислить несколько агрегатов, например

Код: Выделить всё

df.group_by_dynamic("datetime", every="10s").agg(
pl.col("v0").mean().alias("v0_binmean"),
pl.col("v0").count().alias("v0_bincount")
)
┌─────────────────────┬────────────┬─────────────┐
│ datetime            ┆ v0_binmean ┆ v0_bincount │
│ ---                 ┆ ---        ┆ ---         │
│ datetime[μs]        ┆ f64        ┆ u32         │
╞═════════════════════╪════════════╪═════════════╡
│ 2022-10-30 00:00:00 ┆ 4.0        ┆ 5           │
│ 2022-10-30 00:00:10 ┆ 14.0       ┆ 5           │
│ 2022-10-30 00:00:20 ┆ 24.0       ┆ 5           │
│ 2022-10-30 00:00:30 ┆ 34.0       ┆ 5           │
│ ...                 ┆ ...        ┆ ...         │
или рассчитайте одно агрегирование для нескольких столбцов, например

Код: Выделить всё

cols = [c for c in df.columns if "datetime" not in c]
df.group_by_dynamic("datetime", every="10s").agg(
pl.col(f"{c}").mean().alias(f"{c}_binmean")
for c in cols
)

┌─────────────────────┬────────────┬────────────┐
│ datetime            ┆ v0_binmean ┆ v1_binmean │
│ ---                 ┆ ---        ┆ ---        │
│ datetime[μs]        ┆ f64        ┆ f64        │
╞═════════════════════╪════════════╪════════════╡
│ 2022-10-30 00:00:00 ┆ 4.0        ┆ 4.0        │
│ 2022-10-30 00:00:10 ┆ 14.0       ┆ 14.0       │
│ 2022-10-30 00:00:20 ┆ 24.0       ┆ 24.0       │
│ 2022-10-30 00:00:30 ┆ 34.0       ┆ 34.0       │
│ ...                 ┆ ...        ┆ ...        │
Однако объединить оба подхода не получится!

Код: Выделить всё

df.group_by_dynamic("datetime", every="10s").agg(
[
pl.col(f"{c}").mean().alias(f"{c}_binmean"),
pl.col(f"{c}").count().alias(f"{c}_bincount")
]
for c in cols
)

Код: Выделить всё

DuplicateError: column with name 'literal' has more than one occurrences
Существует ли «полярный» подход для расчета нескольких статистических параметров для нескольких (всех) столбцов кадра данных за один раз?
связано, pandas -специфично: Python pandas группируется по нескольким столбцам

Подробнее здесь: https://stackoverflow.com/questions/749 ... hon-polars
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»