Wie kann ich else( ) stoppen, wenn ich einen when( )-Ausdruck in Polars verwende?Python

Python-Programme
Anonymous
 Wie kann ich else( ) stoppen, wenn ich einen when( )-Ausdruck in Polars verwende?

Post by Anonymous »

Das ist mein Datenrahmen:

Code: Select all

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 │
└─────────────────────┴──────────┘
""")
Mein Hauptproblem bestand darin, nahe beieinander liegende Preise zu finden und sie in Polars zusammenzufassen, aber ich habe keinen nützlichen Code gefunden. Also habe ich beschlossen, es außerhalb von Polars zu machen.
Jetzt habe ich das Problem mit Polars, dass ich den Preis basierend auf einer verschachtelten Liste, die ich separat habe, kategorisieren möchte. Ich verwende den folgenden Code:

Code: Select all

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')
)
Welche Resistance_groups ist so:

Code: Select all

resistance_groups = [[2064.885, 2069.708, 2074.485], [2080.245, 2083.865, 2088.224]]
Und highs ist der obige Datenrahmen.
Das Ergebnis des obigen Codes in der ersten Schleife ist:

Code: Select all

┌─────────────────────┬──────────┬────────┐
│ 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      │
└─────────────────────┴──────────┴────────┘
Und in der zweiten Schleife ist es:

Code: Select all

┌─────────────────────┬──────────┬────────┐
│ 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   │
└─────────────────────┴──────────┴────────┘
Wie Sie sehen, werden die Ergebnisse der ersten Schleife aus df entfernt.
Kann jemand eine Möglichkeit vorschlagen, entweder .otherwise() zu stoppen oder die Preisspalte auf andere Weise zu kategorisieren?
Ich habe auch versucht, mehrere Wenn-Dann-Ausdrücke zu verwenden, und es hat auch nicht funktioniert.
Die Verwendung einer anderen Spalte war auch nicht so gut.
Und gerade dabei Fall: Das Entfernen von .otherwise( ) bedeutet, dass die Werte auf Null gesetzt werden.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post