Есть ли способ выполнить поворот на Polars LazyFrame?Python

Программы на Python
Ответить
Anonymous
 Есть ли способ выполнить поворот на Polars LazyFrame?

Сообщение Anonymous »

Я пытаюсь выполнить операцию поворота на фрейме данных с отложенной полярностью.
Это означает, что если я соберу свои данные, я смогу выполнить поворот:
df = pl.read_parquet(path,low_memory=True)
pivoted_df = df.pivot(index=["ind1", "ind2", "ind3", "ind4"], columns="my_signal", values="Value", aggregate_function="mean")

Эти строки кода работают.
Однако, если я использую ленивый фрейм данных, вызывая это:
df = pl.scan_parquet(path,low_memory=True)


Я не могу найти способ выполнить тот же алгоритм. .pivot нельзя применить к ленивому объекту.
ВАЖНО: я не хочу в какой-либо момент собирать данные с помощью df.collect(), поскольку у меня очень большой набор данных, который не помещается в памяти.
Я хочу сохранить ленивый фрейм данных в конце с помощью Pivoted_df .sink_parquet(), так что да, я не хочу ни в коем случае собирать данные.
Заранее спасибо!
Я пробовал использовать .group_by вместо .pivot:
grouped_df = df.group_by(["["ind1", "ind2", "ind3", "ind4"])
transformed_df = grouped_df.agg(**{f"{col}_mean": pl.col("Value").mean() for col in pl.col('my_signal').unique()})

Но я получаю сообщение об ошибке: объект «Expr» не повторяется, что нормально, поскольку pl.col('full_signal_name').unique() является выражением.
Есть ли альтернативы?
Пример:
df :
┌──────┬──────┬──────┬──────┬───────────┬───────┐
│ ind1 ┆ ind2 ┆ ind3 ┆ ind4 ┆ my_signal ┆ Value │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ str ┆ str ┆ i64 │
╞══════╪══════╪══════╪══════╪═══════════╪═══════╡
│ www ┆ xxx ┆ yyy ┆ zzz ┆ a ┆ 1 │
│ www ┆ xxx ┆ yyy ┆ zzz ┆ a ┆ 1 │
│ www ┆ xxx ┆ yyy ┆ zzz ┆ a ┆ 1 │
│ www ┆ xxx ┆ yyy ┆ zzz ┆ b ┆ 2 │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ b ┆ 2 │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ b ┆ 2 │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ c ┆ 3 │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ c ┆ 3 │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ c ┆ 3 │
└──────┴──────┴──────┴──────┴───────────┴───────┘

pivoted_df:
┌──────┬──────┬──────┬──────┬──────┬─────┬──────┐
│ ind1 ┆ ind2 ┆ ind3 ┆ ind4 ┆ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str ┆ str ┆ f64 ┆ f64 ┆ f64 │
╞══════╪══════╪══════╪══════╪══════╪═════╪══════╡
│ www ┆ xxx ┆ yyy ┆ zzz ┆ 1.0 ┆ 2.0 ┆ null │
│ fff ┆ xxx ┆ yyy ┆ zzz ┆ null ┆ 2.0 ┆ 3.0 │
└──────┴──────┴──────┴──────┴──────┴─────┴──────┘


Подробнее здесь: https://stackoverflow.com/questions/784 ... -lazyframe
Ответить

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

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

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

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

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