Suite

Attribuer un numéro à chaque groupe dans la calculatrice de champ


J'ai plusieurs milliers de fonctionnalités dont chacune a un nom. Les noms ne sont pas uniques. ce que je veux faire avec la calculatrice de champ, c'est attribuer un numéro à chaque nom afin que je puisse faire référence à un numéro et obtenir toujours le même nom.

Par exemple si j'avais :

chris, dave, chris, tom, dave, chris , dave, tom

J'aimerais que ma colonne numérique s'affiche

1, 2, 1, 3, 2, 1, 2, 3

Est-ce quelque chose que je peux faire en utilisant python dans le calculateur de champ ?


Si vous connaissez à l'avance toutes les valeurs d'entrée possibles, il est possible de le faire avec Field Calculator en activant le "Codeblock" et en créant une fonction comme celle-ci :

def classify(name): if name == 'chris': return 1 elif name == 'dave': return 2 elif name == 'tom': return 3 else: return 0

Et puis l'expression que vous utiliseriez pour calculer un autre champ numérique à l'aide de cette fonction serait :

classer(!NAME_FIELD!)

Si tu ne pas connaître à l'avance toutes les valeurs possibles, ou s'il y en a tellement qu'il serait ridicule de taper unelifpour chacun, vous devrez probablement écrire un script Python personnalisé pour le faire à votre place au lieu d'utiliser Field Calculator.


Éditer: Comme indiqué dans les commentaires, si vous ne vous souciez pas de la valeur numérique spécifique attribuée à chaque valeur de texte unique, cela peut probablement être fait avec une variable de liste globale dans le bloc de code, avec le code suivant (basé sur votre commentaire):

mylist = [] def classifier(value): global mylist si la valeur n'est pas dans mylist: mylist.append(value) return mylist.index(value)

Que diriez-vous de parcourir en boucle, de lancer les noms dans un dictionnaire comme clés ? Utilisez un compteur pour ajouter la valeur si la clé n'existe pas, sinon utilisez la valeur de la clé. Donc 'Chris' n'existe pas lorsqu'il est rencontré pour la première fois; 'Chris' devient la clé et 1 la valeur. Ensuite, 'Dave est le suivant, n'existe pas, devient donc une nouvelle clé avec 2 comme valeur. Ensuite, « Chris » est à nouveau rencontré, mais Chris existe déjà en tant que clé, de sorte que la valeur 1, est utilisée, et ainsi de suite.


Voir la vidéo: Tutoriel 6: Calcul du pourcentage de loccupation des sols par sous-bassin (Octobre 2021).