Ho un frame di dati Panda (X11) come questo: In realtà ho 99 colonne fino a 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
Voglio creare colonne aggiuntive per valori di cella come 25041,40391,5856 ecc. Quindi ci sarà una colonna 25041 con valore come 1 o 0 se 25041 si verifica in quella particolare riga in qualsiasi colonna dxs. Sto usando questo codice e funziona quando il numero di righe è inferiore.
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)
Sto ottenendo risultati in questo modo:
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
Quando il numero di righe è di molte migliaia o in milioni, si blocca e impiega un'eternità e non ottengo alcun risultato. Si noti che i valori delle celle non sono univoci per la colonna, ma si ripetono in più colonne. Ad esempio, 40391 si verifica in dx1 e in dx2 e così via per 0 e 5856 ecc. Qualche idea su come migliorare la logica sopra menzionata?