Wie findet man das erste lokale Maximum für jede Gruppe?

8

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%     
user1357015 22.10.2017, 05:09
quelle

5 Antworten

6

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.

%Vor%

Hinweis:
Wir können dies beschleunigen, indem wir auf das zugrunde liegende numpy array zugreifen

%Vor%

Erläuterung

Erhalte Unterschiede

%Vor%

Finde, wo die Unterschiede negativ sind

%Vor%

Ich möchte die erste

%Vor%

Verwenden Sie doppelte Klammern in iloc

%Vor%

Die Gruppe sieht folgendermaßen aus

%Vor%     
piRSquared 22.10.2017, 05:55
quelle
7

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%     
Andy Hayden 22.10.2017 05:29
quelle
3

Verwenden Sie diff + tail :

%Vor%

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):

%Vor%     
cᴏʟᴅsᴘᴇᴇᴅ 22.10.2017 05:18
quelle
3

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%     
Dark 22.10.2017 05:36
quelle
3

Ich denke max kann es tun ...

%Vor%

Oder

%Vor%

Scheint das ist was du brauchst ... sowieso hässliche Art und Weise meinen alten Post zu korrigieren ~.

%Vor%

Für groupby

%Vor%     
Wen 22.10.2017 05:25
quelle