IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Attribuer un chiffre à chaque observation


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Data Analyst
    Inscrit en
    Février 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Data Analyst

    Informations forums :
    Inscription : Février 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Attribuer un chiffre à chaque observation
    Bonjour,

    J'ai des difficultés à réaliser une boucle pour produire le résultat suivant :

    Chaque modalité dans la colonne A peut avoir une ou plusieurs modalités dans la colonne B.
    Je souhaite, à chaque modalité de la colonne A et pour chacune des modalités de la colonne B, attribuer un chiffre de 1 à N, puis recommencer ensuite sur la modalité suivante de la colonne A.

    Ce qui donnerait un truc comme ça (la colonne Besoin étant celle que je cherche à construire) :

    Colonne A Colonne B Besoin
    2001008799 9791820 1
    2001008799 9791842 2
    2001008799 9791843 3
    2000261690 50016 1
    2000261690 50023 2
    2000261690 50024 3
    2000261690 50069 4

    Je ne suis pas du tout à l'aise avec Python, j'ai bien en tête que je vais devoir utiliser une fonction range() mais je ne sais absolument pas comment la "coder". Mes connaissances dans ce langage sont encore bien trop rudimentaires pour être assez à l'aise...

    Si vous avez une idée pour moi !
    Merci beaucoup !
    Triton.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Il n'y a pas de "modalités" dans Python... donc écrire " à chaque modalité de la colonne A et pour chacune des modalités de la colonne B" c'est bien mais si on ne sait pas quoi extraire des colonnes A et B.

    Pour le reste, vous voyez déjà qu'avant de réaliser la boucle il faut préciser le traitement élémentaire qui à partir de A=2001008799 B=9791843 produira 3.
    Commencer à le coder avec Python, faire un jeu d'essai et vous assurer que çà marche. Soit f cette fonction.

    Le reste est trivial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for a, b in tableau:
         r = f(a, b)
         print (a, b, r)
    en supposant que tableau est une liste de tuples.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    @wiztricks, une "modalité" je pense que c'est du jargon statistique, "chaque modalité de la colonne B" == "chaque valeur unique de la colonne B"

    un truc comme ça devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> import pandas as pd
    >>> df = pd.DataFrame({
    ...    'Colonne A' : [2001008799, 2001008799, 2001008799, 2000261690, 2000261690, 2000261690, 2000261690],
    ...    'Colonne B' : [9791820, 9791842, 9791843, 50016, 50023, 50024, 50069]
    ... })
    >>> df['Besoin'] = df.groupby('Colonne A')['Colonne B'].transform(lambda x: pd.factorize(x)[0]+1)
    >>> df
        Colonne A  Colonne B  Besoin
    0  2001008799    9791820       1
    1  2001008799    9791842       2
    2  2001008799    9791843       3
    3  2000261690      50016       1
    4  2000261690      50023       2
    5  2000261690      50024       3
    6  2000261690      50069       4

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Triton29 Voir le message
    Chaque modalité dans la colonne A peut avoir une ou plusieurs modalités dans la colonne B.
    Je souhaite, à chaque modalité de la colonne A et pour chacune des modalités de la colonne B, attribuer un chiffre de 1 à N, puis recommencer ensuite sur la modalité suivante de la colonne A.

    Ce qui donnerait un truc comme ça (la colonne Besoin étant celle que je cherche à construire) :

    Colonne A Colonne B Besoin
    2001008799 9791820 1
    2001008799 9791842 2
    2001008799 9791843 3
    2000261690 50016 1
    2000261690 50023 2
    2000261690 50024 3
    2000261690 50069 4
    Une question importante c'est le format d'entrée. Par exemple si les données sont déjà triées sur la colonne A, cela peut permettre de raccourcir l'algo (dès que "A" change, on part sur un nouveau besoin et on peut oublier le précédent).

    Citation Envoyé par Triton29 Voir le message
    Je ne suis pas du tout à l'aise avec Python, j'ai bien en tête que je vais devoir utiliser une fonction range() mais je ne sais absolument pas comment la "coder". Mes connaissances dans ce langage sont encore bien trop rudimentaires pour être assez à l'aise...
    Déjà pour être à l'aise dans un langage il faut bien évidemment connaitre sa syntaxe et ses possibilités (tutoriel). Si tu ne sais pas ce que fait range(), tu ne sauras pas quand l'utiliser (surtout qu'ici justement elle ne servira pas).
    Et surtout aussi il faut aussi être à l'aise manuellement. Si tu avais un papier et un crayon, pourrais-tu établir un schéma de traitement permettant (grosso-modo) de transformer ton format d'entrée en format de sortie ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [AC-2003] Attribuer une valeur à chaque caractère
    Par Mr T 94 dans le forum IHM
    Réponses: 19
    Dernier message: 01/10/2013, 22h44
  2. Attribuer un nom à chaque colonne d'une QTableView
    Par stanfillirenfro dans le forum Qt
    Réponses: 1
    Dernier message: 05/05/2012, 15h42
  3. [Batch] Attribuer une variable à chaque ligne d'un fichier
    Par Acris dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 08/01/2010, 13h49
  4. Réponses: 10
    Dernier message: 02/05/2008, 02h57
  5. Réponses: 15
    Dernier message: 05/01/2008, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo