У меня есть полярный код, который функционально может делать то, что я хочу, но я считаю, что это в лучшем случае неэффективная реализация. Я чувствую, что должен быть какой-то способ добиться того же результата с помощью .map_batches(), но не могу понять, как это сделать. Есть мысли или предложения?
В частности, мои данные организованы следующим образом: каждый столбец — это местоположение, а каждая строка — это дата и время. Я пытаюсь вычислить максимальное количество последовательных ненулевых значений (которые я преобразовал в логические значения, потому что мне не нужна величина значения, мне просто нужно знать, равно ли это значение нулю или нет). Пример данных и пример ожидаемого результата ниже:
Пример фиктивных данных
import polars as pl
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 │
└────────────┴───────┘
Ниже у меня есть код, который функционален, но кажется, что его можно улучшить, если кто-то умнее и лучше разбирается в полярных явлениях, чем я.
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
Есть ли способ использовать Polars Map_batches, чтобы сделать этот код более эффективным? ⇐ Python
Программы на Python
1762098825
Anonymous
У меня есть полярный код, который функционально может делать то, что я хочу, но я считаю, что это в лучшем случае неэффективная реализация. Я чувствую, что должен быть какой-то способ добиться того же результата с помощью .map_batches(), но не могу понять, как это сделать. Есть мысли или предложения?
В частности, мои данные организованы следующим образом: каждый столбец — это местоположение, а каждая строка — это дата и время. Я пытаюсь вычислить максимальное количество последовательных ненулевых значений (которые я преобразовал в логические значения, потому что мне не нужна величина значения, мне просто нужно знать, равно ли это значение нулю или нет). Пример данных и пример ожидаемого результата ниже:
[b]Пример фиктивных данных[/b]
import polars as pl
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 │
└─────────────────────┴────────────┴────────────┘
""")
[b]Ожидаемый результат[/b]:
┌────────────┬───────┐
│ Location ┆ Value │
│ --- ┆ --- │
│ str ┆ i32 │
╞════════════╪═══════╡
│ Location 1 ┆ 3 │
│ Location 2 ┆ 5 │
└────────────┴───────┘
Ниже у меня есть код, который функционален, но кажется, что его можно улучшить, если кто-то умнее и лучше разбирается в полярных явлениях, чем я.
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()
)
Подробнее здесь: [url]https://stackoverflow.com/questions/75881531/is-there-a-way-to-utilize-polars-map-batches-to-make-this-code-more-efficient[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия