Есть ли способ использовать Polars Map_batches, чтобы сделать этот код более эффективным?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ использовать Polars Map_batches, чтобы сделать этот код более эффективным?

Сообщение Anonymous »

У меня есть полярный код, который функционально может делать то, что я хочу, но я считаю, что это в лучшем случае неэффективная реализация. Я чувствую, что должен быть какой-то способ добиться того же результата с помощью .map_batches(), но не могу понять, как это сделать. Есть мысли или предложения?
В частности, мои данные организованы следующим образом: каждый столбец — это местоположение, а каждая строка — это дата и время. Я пытаюсь вычислить максимальное количество последовательных ненулевых значений (которые я преобразовал в логические значения, потому что мне не нужна величина значения, мне просто нужно знать, равно ли это значение нулю или нет). Пример данных и пример ожидаемого результата ниже:
Пример фиктивных данных
pivoted_df = pl.from_repr("""
┌─────────────────────┬────────────┬────────────┐
│ Date ┆ Location 1 ┆ Location 2 │
│ --- ┆ --- ┆ --- │
│ datetime[ns] ┆ i64 ┆ i64 │
╞═════════════════════╪════════════╪════════════╡
│ 2023-01-01 00:00:00 ┆ 0 ┆ 1 │
│ 2023-01-01 01:00:00 ┆ 1 ┆ 1 │
│ 2023-01-01 02:00:00 ┆ 1 ┆ 1 │
│ 2023-01-01 03:00:00 ┆ 0 ┆ 1 │
│ 2023-01-01 04:00:00 ┆ 1 ┆ 1 │
│ 2023-01-01 05:00:00 ┆ 1 ┆ 0 │
│ 2023-01-01 06:00:00 ┆ 1 ┆ 0 │
└─────────────────────┴────────────┴────────────┘
""")

Ожидаемый результат:
┌────────────┬───────┐
│ Location ┆ Value │
│ --- ┆ --- │
│ str ┆ i32 │
╞════════════╪═══════╡
│ Location 1 ┆ 3 │
│ Location 2 ┆ 5 │
└────────────┴───────┘

Ниже у меня есть код, который функционален, но кажется, что его можно улучшить, если кто-то умнее и лучше разбирается в полярных явлениях, чем я.< /p>
for col in pivoted_df.drop("Date").columns:
xy_cont_df_a = (
pivoted_df.select(pl.col(col))
.with_columns(
pl.when(
pl.col(col).cast(pl.Boolean)
& pl.col(col)
.cast(pl.Boolean)
.shift(-1, fill_value=False)
.not_()
).then(
pl.count().over(
(
pl.col(col).cast(pl.Boolean)
!= pl.col(col).cast(pl.Boolean).shift()
).cum_sum()
)
)
)
.max()
)


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

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

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

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

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

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

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