J'ai une trame de données pandas (X11) comme celle-ci: en réalité, j'ai 99 colonnes jusqu'à 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
Je veux créer des colonnes supplémentaires pour des valeurs de cellule comme 25041,40391,5856 etc. Il y aura donc une colonne 25041 avec la valeur 1 ou 0 si 25041 se produit dans cette ligne particulière dans les colonnes dxs. J'utilise ce code et cela fonctionne lorsque le nombre de lignes est inférieur.
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)
J'obtiens un résultat comme celui-ci:
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
Lorsque le nombre de lignes est de plusieurs milliers ou de millions, cela se bloque et prend une éternité et je n'obtiens aucun résultat. Veuillez noter que les valeurs des cellules ne sont pas uniques à la colonne, mais plutôt répétées dans plusieurs colonnes. Par exemple, 40391 se produit dans dx1 ainsi que dans dx2 et ainsi de suite pour 0 et 5856 etc. Une idée comment améliorer la logique mentionnée ci-dessus?