Je travaille sur un jeu de données d'échecs, où j'ai eu une colonne de mouvement_1, mobile_2, mobile_3 et ainsi de suite ... Chacune de ces colonnes a le «code de jeu» effectué par le joueur. Chaque ligne est pour un jeu spécifique et il y a environ 1000 rangées.
chess_df['move_2'].replace(to_replace=['Nf3', 'c4', 'd3','d4', 'Nc3'],
value= [3, 2, 4, 1, 7],
inplace=True)
4 Réponses :
Est-ce que cela aide?
Oh mec, cela semble vraiment simple! En faisant cela, les valeurs uniques d'une colonne seront-elles poussées à la suivante aussi? EDIT: Il suffit d'essayer et les valeurs sont attribuées par la colonne. L'étiquette est-elle codée capable de maintenir l'entier assigné dans chaque colonne identique?
Je crois que c'est mieux que l'encodage des étiquettes, car il nécessiterait des lignes supplémentaires (l'encodage des étiquettes prend une matrice, pas une matrice). En outre, vous me battez, je pensais la même chose! +1 :)
@Danwilkin, je viens d'avoir un deuxième regard sur la question. Maintenant, la chose est que les jeux d'échecs peuvent avoir une pléthore de mouvements. Mais le nombre de notations possibles est fini. Je pense que vous devriez penser à un moyen de convertir la notation en un nombre. EG: ND4 = 3 * 100 + 4 * 10 + 4 = 244. BC3 = 2 * 100 + 3 * 10 + 3. J'ai assigné 2 à Bishop et 3 à chevalier. En outre, j'ai substitué des étables de place pour chaque poste. Pas très sûr que la solution d'Alollz pourrait être adaptée à la mémoire avec succès et suggère ainsi cette technique. Si vous aimez cette technique, je peux mettre à jour mon en conséquence pour vous donner une idée.
Hey @paradoxlover Damn, c'est en fait une idée vraiment vraiment géniale! J'ai choisi les jeux d'échecs comme un projet personnel pour aider un bon ami à moi à analyser les matchs d'échecs. J'apprends toujours (Eh bien, je vais toujours apprendre), alors j'apprécierais profondément une idée de votre suggestion! :) Merci pour votre temps!
Ok alors, je vais mettre à jour ma réponse quand je suis libre, député d'aujourd'hui soir. Vous pouvez y jeter un coup d'oeil !!!
Une alternative simple consiste à tout empiler en une seule série, classez-la, puis instantanée. De cette façon, le rang est appliqué à l'ensemble de lataframe. Ici "D4" devient 6 quelle que soit l'endroit où il se produit.
arr = df.filter(like='move')
pd.DataFrame(np.unique(arr, return_inverse=True)[1].reshape(arr.shape),
index=arr.index,
columns=arr.columns)
# move_1 move_2 move_3
#0 7 5 0
#1 5 2 3
#2 7 4 1
#3 5 3 6
#4 5 3 0
J'obtiens l'erreur suivante: 'L'objet' index 'n'a aucun attribut' supprimer_unused_levels '' code>
Correction du problème en ajoutant un soulignement après avoir déménagé et réparer "ASTYPE" Merci !!!! df.filter (comme = 'déplacer _'). Stack (). Rang (méthode = 'dense'). Astype (int) .nstack ()
Ce serait mon approche: sortie: p> essentiellement, nous créons un dictionnaire avec les positions d'échecs comme clé et un numéro unique en tant que valeur. Ceci sera ensuite utilisé dans df.replace () code> pour effectuer le remplacement sur toutes les valeurs du DF. P> p>
Ce compte de réponse Toutes les déménagements dans en d'autres termes, il attribue des entiers à entrée / sortie pour l'exemple en question: p> Move_1 code>, puis Move_2 code> et ainsi de suite (je suppose que c'est ainsi que vous avez décrit en question) et trouve des mouvements uniques dans tous les mouvements de La commande mentionnée et les attribue des valeurs entières: mobile_1 code> d'abord, puis move_2 code> (comptant pour Répétitions) et ainsi de suite. P>
Bienvenue à cela. Veuillez vérifier Stackoverflow.com/help/someone-answers sur la manière d'accepter les réponses à ce sujet. Merci.
Hey @ehsan, je n'avais aucune idée! Merci beaucoup!