Beschleunigung einer Iloc-Lösung innerhalb eines Pandas-Datenrahmens

8

Ich habe folgende DataFrame :

%Vor%

Ich möchte die folgende Logik für die Spalten B und C implementieren:

  • B(k+1) = B(k) - A(k+1)
  • C(k+1) = B(k) + A(k+1)

Ich kann dies mit dem folgenden Code tun:

%Vor%

Dies ergibt:

%Vor%

Was ist die Antwort, nach der ich suche? Das Problem ist, wenn ich dies auf ein DataFrame mit einem großen Dataset anwende, läuft es langsam. Sehr langsam. Gibt es einen besseren Weg, dies zu erreichen?

    
Anthony W 17.10.2015, 08:22
quelle

4 Antworten

2

Rekursive Dinge wie diese können schwer zu vektorisieren sein. numba behandelt sie normalerweise gut - wenn Sie Ihren Code neu verteilen müssen, cython ist möglicherweise eine bessere Wahl, da es reguläre c-Erweiterungen ohne zusätzliche Abhängigkeiten erzeugt.

%Vor%

Bearbeiten: Wie in den anderen Antworten gezeigt, kann dieses Problem tatsächlich vektorisiert werden, was Sie wahrscheinlich verwenden sollten.

    
chrisb 17.10.2015, 17:03
quelle
6

Ein Trick zur Vektorisierung ist, alles als cumsums neu zu schreiben.

%Vor%

Hinweis: Der erste Wert ist ein Sonderfall, daher müssen Sie ihn auf 3 zurücksetzen.

    
Andy Hayden 17.10.2015 17:05
quelle
1

Grundsätzlich ist es nur Ihre Antwort ohne die for-Schleife:

%Vor%

Ich weiß nichts über Leistungsprobleme, aber ich denke, ohne die Schleife wird es schneller.

    
Elad Joseph 17.10.2015 17:05
quelle
1

Eine vollständige Lösung:

%Vor%     
Sergey Bushmanov 17.10.2015 17:45
quelle

Tags und Links