Как остановить в противном случае( ) при использовании выражения When( ) в Polars?Python

Программы на Python
Anonymous
 Как остановить в противном случае( ) при использовании выражения When( ) в Polars?

Сообщение Anonymous »

Это мой фрейм данных:

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

import polars as pl

highs = pl.from_repr("""
┌─────────────────────┬──────────┐
│ date                ┆ price    │
│ ---                 ┆ ---      │
│ datetime[μs]        ┆ f64      │
╞═════════════════════╪══════════╡
│ 2023-12-20 14:10:00 ┆ 2039.105 │
│ 2023-12-21 14:45:00 ┆ 2045.795 │
│ 2023-12-22 15:10:00 ┆ 2069.708 │
│ 2023-12-26 06:45:00 ┆ 2064.885 │
│ 2023-12-27 18:00:00 ┆ 2083.865 │
│ 2023-12-28 03:05:00 ┆ 2088.224 │
│ 2023-12-28 15:00:00 ┆ 2080.245 │
│ 2023-12-29 07:10:00 ┆ 2074.485 │
└─────────────────────┴──────────┘
""")
Моей главной задачей было найти цены, близкие друг к другу, и сгруппировать их в Polars, но я не нашел никакого полезного кода. Итак, я решил сделать это за пределами Polars.
Теперь у меня возникла проблема с Polars: я хочу классифицировать цены на основе вложенного списка, который у меня есть отдельно. Я использую приведенный ниже код:

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

for i ,group in enumerate(resistance_groups):
highs = highs.with_columns(
pl.when(pl.col('price').is_in(group))
.then(i+1)
.otherwise(None)
.alias('groups')
)
Какие группы сопротивления такие:

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

resistance_groups = [[2064.885, 2069.708, 2074.485], [2080.245, 2083.865, 2088.224]]
И максимумы — это приведенный выше кадр данных.
Результат приведенного выше кода в первом цикле:

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

┌─────────────────────┬──────────┬────────┐
│ date                ┆ price    ┆ groups │
│ ---                 ┆ ---      ┆ ---    │
│ datetime[μs]        ┆ f64      ┆ i32    │
╞═════════════════════╪══════════╪════════╡
│ 2023-12-20 14:10:00 ┆ 2039.105 ┆ null   │
│ 2023-12-21 14:45:00 ┆ 2045.795 ┆ null   │
│ 2023-12-22 15:10:00 ┆ 2069.708 ┆ 1      │
│ 2023-12-26 06:45:00 ┆ 2064.885 ┆ 1      │
│ 2023-12-27 18:00:00 ┆ 2083.865 ┆ null   │
│ 2023-12-28 03:05:00 ┆ 2088.224 ┆ null   │
│ 2023-12-28 15:00:00 ┆ 2080.245 ┆ null   │
│ 2023-12-29 07:10:00 ┆ 2074.485 ┆ 1      │
└─────────────────────┴──────────┴────────┘
И во втором цикле это:

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

┌─────────────────────┬──────────┬────────┐
│ date                ┆ price    ┆ groups │
│ ---                 ┆ ---      ┆ ---    │
│ datetime[μs]        ┆ f64      ┆ i32    │
╞═════════════════════╪══════════╪════════╡
│ 2023-12-20 14:10:00 ┆ 2039.105 ┆ null   │
│ 2023-12-21 14:45:00 ┆ 2045.795 ┆ null   │
│ 2023-12-22 15:10:00 ┆ 2069.708 ┆ null   │
│ 2023-12-26 06:45:00 ┆ 2064.885 ┆ null   │
│ 2023-12-27 18:00:00 ┆ 2083.865 ┆ 2      │
│ 2023-12-28 03:05:00 ┆ 2088.224 ┆ 2      │
│ 2023-12-28 15:00:00 ┆ 2080.245 ┆ 2      │
│ 2023-12-29 07:10:00 ┆ 2074.485 ┆ null   │
└─────────────────────┴──────────┴────────┘
Как вы видите, результаты первого цикла удаляются из df.
Может ли кто-нибудь предложить способ остановить .otherwise() или любой другой способ категоризировать столбец цен?
Я тоже пытался использовать несколько выражений «когда-то», и это тоже не сработало,
использование другого столбца тоже было не так уж хорошо.
И только в случай: удаление .otherwise( ) означает установку значений на ноль.

Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-polars

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