Seite 1 von 1

if letzte dataframe Werte > x, dann True?

Verfasst: Donnerstag 14. Juli 2022, 08:59
von August1328
Servus miteinander,

ich probiere mich gerade an einem Trading bot und habe dazu ein Skript geschrieben, welches live Daten von einem API empfängt und an einen dataframe anfügt.

Am Ende des ganzen Skript steht eine if Abfrage, die eine Order auslöst, wenn gewisse Bedingungen in dem Dataframe erfüllt sind. Das klappt alles.

Nun möchte ich diese if Bedingung um eine Abfrage erweitern, die prüft, ob die letzten 3 Werte in einer Spalte größer 3,7 sind, aber ich stehe aufm Schlauch und komme trotz Recherche nicht weiter.

Wir man True/False in nem dataframe prüft, habe ich kapiert:

Code: Alles auswählen

df['V/AV'].apply(lambda x: 'True' if x > 3.7 else 'False')
Das hilft mir aber nix, da das True/False in nem dataframe vorliegt.

Ich könnte daraus ne Liste machen, und dann fragen ob 3x True drin ist und das dann in die if Bedingungen rein nehmen, finde ich aber etwas umständlich.

Dann habe ich einfach mal was probiert, aber das geht natürlich so nicht :lol:

Code: Alles auswählen

if df['V/AV'].tail(3).all() > 3.7:
Kann mich bitte jemand "erleuchten"?

Gruß
Andy

Re: if letzte dataframe Werte > x, dann True?

Verfasst: Donnerstag 14. Juli 2022, 10:49
von __deets__
Was soll denn das benutzen von 'True' und 'False'? Damit hast du doch nur voellig nutzlose Strings erzeugt, statt die Konstanten True und False, mit denen man arbeiten kann.

Und nach der Anwendung deiner Bedingung hast du einen df mit boolschen werten, dann gibt es zB np.logical_and, mit dem du auf einer Reihe von Werten den and-Operator ausfuehrst. Und das Ergebnis ist nur dann wahr, wenn *alle* wahr sind.

Code: Alles auswählen

import pandas as pd
import numpy as np

THRESHOLD = 2 # wie weit in die Vergangenheit will man schauen?

df = pd.DataFrame(
    { "name": ["foo", "bar", "baz"],
     "wert" : [ 1.0, 4.0, 5.0 ],
     })

print(df)

filtered = df["wert"].apply(lambda v: v > 3.7).to_numpy()
print(filtered)

print(np.logical_and.reduce(filtered[-THRESHOLD:]))

Re: if letzte dataframe Werte > x, dann True?

Verfasst: Donnerstag 14. Juli 2022, 11:13
von August1328
Super, Dankeschön!!

Hab´s gerade getestet und ins Skript eingebaut. Wird heute Nachmittag laufen gelassen.

Grüße
Andy

Re: if letzte dataframe Werte > x, dann True?

Verfasst: Donnerstag 14. Juli 2022, 23:09
von bords0
Etwas kürzer (und m.E. einfacher zu verstehen):

Code: Alles auswählen

(df["wert"].tail(THRESHOLD) > 3.7).all()