Angenommen, ich habe einen Pandas-Datenrahmen wie folgt:
%Vor%Ich möchte die Zeile mit Parameterwert 3 erhalten. Das ist die Zeile mit dem letzten steigenden Wert vor dem ersten Drop. Beachten Sie, dass wir später höhere Werte haben könnten (z. B. Zeile 22). Im Wesentlichen versuche ich, die "letzte" Nummer vor dem "ersten" Wert zu erhalten.
Beachten Sie auch, dass es mehrere Tests gibt, also muss ich wahrscheinlich Folgendes tun:
%Vor% Benutze np.diff
, es reduziert natürlich die Länge des Arrays um eins und wenn ich np.flatnonzero
verwende, wird es die ordinalen Positionen vorher identifizieren.
Hinweis:
Wir können dies beschleunigen, indem wir auf das zugrunde liegende numpy array zugreifen
Erläuterung
Erhalte Unterschiede
%Vor%Finde, wo die Unterschiede negativ sind
%Vor%Ich möchte die erste
%Vor% Verwenden Sie doppelte Klammern in iloc
Die Gruppe sieht folgendermaßen aus
%Vor%Coldspeed hat es fast, um nur die erste Gruppe zu bekommen, können Sie cumprod oder ähnliches verwenden, z. B.
%Vor%Der Trick ist:
%Vor%Hinweis: Mein df ist das:
%Vor% Verwenden Sie diff
+ tail
:
Dies ruft das letzte lokale Minimum ab. Wenn Sie das erste lokale Minimum möchten, wenden Sie sich an Andy Haydens Lösung mit cumprod
.
Wenn Sie dies in einer Operation groupby
tun, wäre es etwas wie (von Andy borgen):
Auch von scipy arglextrema können wir tun (Von lokale Maxima finden )
%Vor% %Vor%Eine groupby Lösung, wenn Sie einen Datenrahmen haben, d. h.
%Vor% %Vor%Ausgabe:
%Vor%Tags und Links python python-3.x pandas dataframe