Ich habe einen Pandas-Datenrahmen (X11) wie folgt: Tatsächlich habe ich 99 Spalten bis zu dx99
dx1 dx2 dx3 dx4
0 25041 40391 5856 0
1 25041 40391 25081 5856
2 25041 40391 42822 0
3 25061 40391 0 0
4 25041 40391 0 5856
5 40391 25002 5856 3569
Ich möchte zusätzliche Spalten für Zellenwerte wie 25041,40391,5856 usw. erstellen. Es wird also eine Spalte 25041 mit dem Wert 1 oder 0 geben, wenn 25041 in dieser bestimmten Zeile in einer beliebigen dxs-Spalte vorkommt. Ich verwende diesen Code und er funktioniert, wenn die Anzahl der Zeilen geringer ist.
mat = X11.as_matrix(columns=None)
values, counts = np.unique(mat.astype(str), return_counts=True)
for x in values:
X11[x] = X11.isin([x]).any(1).astype(int)
Ich bekomme folgendes Ergebnis:
dx1 dx2 dx3 dx4 0 25002 25041 25061 25081 3569 40391 42822 5856
25041 40391 5856 0 0 0 1 0 0 0 1 0 1
25041 40391 25081 5856 0 0 1 0 1 0 1 0 1
25041 40391 42822 0 0 0 1 0 0 0 1 1 0
25061 40391 0 0 0 0 0 1 0 0 1 0 0
25041 40391 0 5856 0 0 1 0 0 0 1 0 1
40391 25002 5856 3569 0 1 0 0 0 1 1 0 1
Wenn die Anzahl der Zeilen viele Tausend oder in Millionen beträgt, hängt es und dauert ewig, und ich erhalte kein Ergebnis. Bitte beachten Sie, dass die Zellenwerte nicht nur für Spalten gelten, sondern sich in mehreren Spalten wiederholen. Zum Beispiel kommt 40391 sowohl in dx1 als auch in dx2 usw. für 0 und 5856 usw. vor. Haben Sie eine Idee, wie Sie die oben erwähnte Logik verbessern können?