Bonjour,
J'ai crée avec panda un tableau très simple à partir d'un csv.
La colone qui m'interesse principalement est la colonne 'score' qui est triée dans l'ordre décroissant.
Tableau.score contient une liste de scores allant de 0 à 1.
Sur cette colonne, j'effectue un k-mean en 3 cluster que je mets dans mon Tableau aussi.
Actuellement, ca va me donner un truc comme cela :
Score |
Label |
1 |
2 |
0.90 |
2 |
0.85 |
2 |
0.60 |
0 |
0.60 |
0 |
0.55 |
0 |
0.50 |
0 |
0.49 |
0 |
0.1 |
1 |
0 |
1 |
Etant donné que je suis en 1 dimension, je voudrais renuméroter mon label en suivant l'ordre de mes scores.
Je pensais utiliser la fonction rank() mais j'ai un peu du mal à la gérer ?
Tableau.['label'].rank(method='dense')
me retourne le rang des labels, c'est à dire 1;2;3 en lieu et place de 0;1;2, sans prendre en compte l'ordre des scores.
Il me faudrait une combinaison de la méthode first et la méthode dense
Vous auriez une facon astucieuse de faire cela ?
------------------------------------------------------------------------------------------------------------------
Petit edit, car c'est vrai qu'après la remarque de tyrtamos, je peux très bien me debarasser de la notion de kmean qui n'apporte rien.
On va simplifier donc, il s'agit d'un problème de calcule de rang sur deux colonnes.
Si vous reprenez le tableau ci-dessus, l'output doit être le suivant :
Score |
Label |
1 |
1 |
0.90 |
1 |
0.85 |
1 |
0.60 |
2 |
0.60 |
2 |
0.55 |
2 |
0.50 |
2 |
0.49 |
2 |
0.1 |
3 |
0 |
3 |
On va remplacer les valeurs de la colonne label avec un auto incrément à chaque fois qu'on change de valeur. Sachant que le tableau est trié par la colonne score décroissant, et que un meme label ne peut apparaitre que consécutivement,
c'est à dire que je peux avoir par exemple 2222000011111 ou encore 000001111122222 (ils peuvent être déja ordonnés, je n'ai pas de controle dessus) mais je n'aurais jamais 121210000.
Ce que je voudrais, c'est le traiter directement avec une création de colonne dans pandas, sans avoir à parcourir mon tableau (en parcourant c'est trivial)
Partager