Tengo un marco de datos de pandas (X11) como este: en realidad tengo 99 columnas hasta 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
Quiero crear columnas adicionales para valores de celda como 25041,40391,5856, etc. Entonces habrá una columna 25041 con un valor de 1 o 0 si 25041 aparece en esa fila en particular en cualquier columna dxs. Estoy usando este código y funciona cuando el número de filas es menor.
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)
Estoy obteniendo un resultado como este:
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
Cuando el número de filas es de muchos miles o millones, se cuelga y tarda una eternidad y no obtengo ningún resultado. Observe que los valores de las celdas no son exclusivos de la columna, sino que se repiten en varias columnas. Por ejemplo, 40391 está ocurriendo en dx1 así como en dx2 y así sucesivamente para 0 y 5856, etc. ¿Alguna idea de cómo mejorar la lógica mencionada anteriormente?