2016-07-12 13 views
3

Ich möchte die folgende Operation in einem Pandas oder Pyspark Datenframe ausführen, aber ich habe immer noch keine Lösung gefunden.Subtrahieren aufeinanderfolgende Spalten in einem Pandas oder Pyspark Dataframe

Ich möchte die Werte von aufeinanderfolgenden Spalten in einem Datenrahmen subtrahieren.

Die Operation, die ich beschreibe, kann im Bild unten gesehen werden.

Input and Output Dataframe

Beachten Sie, dass die Ausgangsdatenrahmen gewohnt haben alle Werte auf die erste Spalte als die erste Spalte in der Eingabetabelle kann durch seine vorherige nicht abgezogen werden, da es nicht existiert.

Antwort

3

diff hat einen axis param, so dass Sie dies in einem Schritt nur tun können:

In [63]: 
df = pd.DataFrame(np.random.rand(3, 4), ['row1', 'row2', 'row3'], ['A', 'B', 'C', 'D']) 
df 

Out[63]: 
      A   B   C   D 
row1 0.146855 0.250781 0.766990 0.756016 
row2 0.528201 0.446637 0.576045 0.576907 
row3 0.308577 0.592271 0.553752 0.512420 

In [64]: 
df.diff(axis=1) 

Out[64]: 
     A   B   C   D 
row1 NaN 0.103926 0.516209 -0.010975 
row2 NaN -0.081564 0.129408 0.000862 
row3 NaN 0.283694 -0.038520 -0.041331 
+0

Hallo Ed, das man als gut gearbeitet. Vielen Dank – Demis

+0

Keine Sorge, Sie können nur eine Antwort übrigens akzeptieren, je nachdem, was Sie fühlen, ist das Beste an Ihnen – EdChum

+0

@ EdChum ist besser, wählen Sie dieses. Ich habe die Option "axis = 1" vergessen. Die doppelte Transposition ist eine meiner Gewohnheiten, die Charaktere rettet. Das einzige Verdienst meiner Wahl ist die Speicherung von 2 Zeichen. Wähle dieses aus. – piRSquared

1
df = pd.DataFrame(np.random.rand(3, 4), ['row1', 'row2', 'row3'], ['A', 'B', 'C', 'D']) 
df.T.diff().T 

enter image description here

+0

Sie sind ein Stern piRSquared – Demis