if letzte dataframe Werte > x, dann True?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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:]))
August1328
User
Beiträge: 65
Registriert: Samstag 27. Februar 2021, 12:18

Super, Dankeschön!!

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

Grüße
Andy
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Etwas kürzer (und m.E. einfacher zu verstehen):

Code: Alles auswählen

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