2017-06-13 5 views
1

Ich bin auf der Suche nach jedem Paar aufeinander folgender Spalte und füllen Sie den berechneten Wert neu. Zum Beispiel habe ich den folgenden Datenrahmen unten. Im Datenrahmen unten möchte ich B/A und D/C teilen. Dann sollte das Ergebnis von B/A in Spalte B neu aufgefüllt werden und das Ergebnis von D/C sollte in Spalte D aufgefüllt werden.Teilen Sie jedes Paar der Spalte miteinander

Beachten Sie, dass mein tatsächlicher DataFrame sehr groß ist. Es hat 86 Spalten. Ich hätte lieber ein automatisiertes Schema, das entweder alle Spalten durchläuft (das sind 86 Spalten), die die Werte in 43 Spalten ändern, oder eine eingebaute Pandas-Funktion, die diese Operation ausführt.

 A   B   C   D 
0 2.056494 -3.002088 0.516822 -1.338846 
1 0.082295 1.387734 -0.495226 1.119553 
2 0.298618 -0.130158 0.804705 -0.120110 
3 0.178088 1.137238 1.331856 -0.472720 
4 -0.378670 1.649041 -0.240723 2.044113 
5 3.602587 1.152502 -0.170646 -0.961922 
6 -0.285846 -0.154891 1.492879 0.752487 
7 -0.412809 1.076796 -2.001025 -0.954021 

Vielen Dank für das Lesen und schätzen Ihre Hilfe.

Antwort

5

Sie können .iloc nutzen jede andere Spalte zu schneiden, und dann .values die Indizes auf beiden Achsen zu entfernen, um es richtig ausrichten werden:

>>> df.iloc[:, 1::2] /= df.iloc[:, ::2].values 
>>> df 
      A   B   C   D 
0 2.056494 -1.459809 0.516822 -2.590536 
1 0.082295 16.862920 -0.495226 -2.260691 
2 0.298618 -0.435868 0.804705 -0.149260 
3 0.178088 6.385820 1.331856 -0.354933 
4 -0.378670 -4.354823 -0.240723 -8.491557 
5 3.602587 0.319910 -0.170646 5.636944 
6 -0.285846 0.541869 1.492879 0.504051 
7 -0.412809 -2.608461 -2.001025 0.476766 

.iloc uns positionell zu indizieren ermöglicht mit dem Standard Python Slicing:

>>> df.iloc[:, 1::2] 
      B   D 
0 -1.459809 -2.590536 
1 16.862920 -2.260691 
2 -0.435868 -0.149260 
3 6.385820 -0.354933 
4 -4.354823 -8.491557 
5 0.319910 5.636944 
6 0.541869 0.504051 
7 -2.608461 0.476766 

Und ohne die .values, würden wir immer noch die Spaltennamen haben, die würde uns geben

>>> df.iloc[:, 1::2]/df.iloc[:, ::2] 
    A B C D 
0 NaN NaN NaN NaN 
1 NaN NaN NaN NaN 
2 NaN NaN NaN NaN 
3 NaN NaN NaN NaN 
4 NaN NaN NaN NaN 
5 NaN NaN NaN NaN 
6 NaN NaN NaN NaN 
7 NaN NaN NaN NaN 
+0

Ehrfürchtig, danke ein Bündel! –

Verwandte Themen