Wie kann ich Werte in einem Pandas DataFrame diskretisieren und in eine binäre Matrix konvertieren?

7

Ich meine so etwas:

Ich habe ein DataFrame mit Spalten, die kategorisch oder nominal sein können. Für jede Beobachtung (Zeile) möchte ich eine neue Zeile erzeugen, in der jeder mögliche Wert für die Variablen nun eine eigene binäre Variable ist. Zum Beispiel, diese Matrix (erste Zeile ist Spaltenbeschriftungen)

%Vor%

würde in etwa so umgewandelt werden:

%Vor%

Jede Variable (Spalte) in der Ausgangsmatrix wird in alle möglichen Werte unterteilt. Wenn es kategorisch ist, wird jeder mögliche Wert eine neue Spalte. Wenn es sich um ein Float handelt, werden die Werte auf eine bestimmte Art und Weise gruppiert (z. B. werden sie immer in 10 Bins aufgeteilt). Wenn es ein int ist, dann kann es jeder mögliche int-Wert oder vielleicht auch binning sein.

Zu Ihrer Information: In meiner realen Anwendung hat die Tabelle bis zu 2 Millionen Zeilen und die vollständige "erweiterte" Matrix kann Hunderte von Spalten haben.

Gibt es eine einfache Möglichkeit, diese Operation durchzuführen?

Getrennt wäre ich auch bereit, diesen Schritt zu überspringen, da ich wirklich versuche, eine Burt-Tabelle zu berechnen (die eine symmetrische Matrix der Kreuztabellen ist). Gibt es einen einfachen Weg, etwas Ähnliches mit der Funktion crosstab zu machen? Andernfalls ist die Berechnung der Kreuztabelle nur eine einfache Matrixmultiplikation.

    
Uri Laserson 29.05.2012, 00:06
quelle

5 Antworten

4

Sie können eine Art von Sendung verwenden:

%Vor%

Und dann verbinden Sie alle Teile zusammen mit pandas.concat oder ähnlich.

    
lbolla 29.05.2012, 08:13
quelle
29

Beachten Sie, dass ich die neuen Funktionen cut und qcut zur Diskretisierung kontinuierlicher Daten implementiert habe:

Ссылка

    
Wes McKinney 12.06.2012 21:52
quelle
5

Für beschriftete Spalten wie die Spalte a und c in Ihrem Beispiel können Sie die eingebaute Methode pandas verwenden get_dummies () .

Beispiel:

%Vor%     
wonderkid2 22.03.2015 12:13
quelle
3

Ich bezweifle, dass Sie die Einfachheit von Patsy schlagen werden. Es wurde genau für diese Aufgabe entworfen:

%Vor%

Hier bedeutet C(a) , dass die Variable in kategorial konvertiert wird und -1 , um die Ausgabe einer Intercept-Spalte zu vermeiden.

    
elyase 02.08.2013 14:37
quelle
1

Ein paar weitere Kommentare zu einer einzigen Antwort zusammenfassen und Fragen beantworten.

%Vor%     
Tim 05.07.2013 04:40
quelle

Tags und Links