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 :

remplir colonne en fonction d'une autre


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut remplir colonne en fonction d'une autre
    Bonjour,

    j'ai ce genre de table
    A B C
    est 1
    1
    ouest 1
    west 2
    2
    2

    et j'essaie d'arriver à ce résultat

    A B C
    est est 1
    est 1
    ouest ouest 1
    west west 2
    west 2
    west 2

    je ne vois pas comment récupérer la valeur d'avant et la remplir... la colonne représente une couleur... des libellé différent peuvent avoir la même couleur....

    ci quelqu'un peut m'orienté ...



    merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Il manque des infos pour pouvoir t'aider, qu'est-ce qui détermine le remplissage de la colonne A? C'est une combinaison des colonnes B et C? C'est uniquement B?

    De ce que je vois , tu remplis A à partir de ce qu'il y a dans la colonne B et ce jusqu'à un changement de valeur de B non?

    Et ça serait bien aussi d'avoir le bout de code que tu as fait pour voir ce qui cloche et peut-être mieux comprendre le soucis, parce que là c'est assez vague.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    bonjour,

    le but est de remplir la colonne A en fonction des valeurs de B et C

    les valeurs de la colonne c sont issues d'une liste de 1 à 6 ou inconnue. si la valeur de la colonne c est "inconnu" alors ont ne remplit pas A.

    la colonne B n'a pas de valeurs issues d'une liste pré configuré c'est aléatoire..

    un index se met a jour a chaque fois qu'une valeur est intégré dans B, je fais un tri la dessus avant de lancer le code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def calcul (A,B,C):
        if B!='' and C in ("1","2","3","4","5","6"):
            A=B
        else:
            pass
        return A

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Il y a un soucis, ton algo et tes tableaux ne correspondent pas.

    Dans ton algo si B est vide, tu ne remplis pas A, or, dans ton premier message, A est rempli même sur les lignes ou B est vide.

    Si je suis ton algo avec :

    A B C
    est 1
    1
    ouest 6
    west inconnu
    5

    Tu devrais obtenir ceci :

    A B C
    est est 1
    1
    ouest ouest 6
    west inconnu
    5

    Si tu veux arriver à ton résultat, il faut que tu fasses un test avec la valeur de A que tu as en entrée et que tu récupère en retour du précédent lancement de ta fonction.
    Ce qui donnerait quelque chose dans ce style là :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def calcul(A, B, C):
        if C in ("1", "2", "3", "4", "5", "6"):
            if A and not B:
                pass
            elif (not A and B) or (A and B):
                A = B
            else:
                A = ''
        else:
            A = ''
        return A

    Et une utilisation comme suit :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    values = [
        ['', 'est', '1'],
        ['', '', '1'],
        ['', 'ouest', '1'],
        ['', 'west', '2'],
        ['', 'west', ''],
        ['', '', '2'],
    ]
    a = ''
    for v in values:
        v[0] = calcul(a, v[1], v[2])
        a = v[0]

    Et en résultat on aurait les tableaux suivant.

    Entrée :
    A B C
    est 1
    1
    ouest 6
    west inconnu
    5

    Sortie:
    A B C
    est est 1
    est 1
    ouest ouest 6
    west inconnu
    5

    Est-ce que c'est bon pour toi où le fonctionnement est différent de ce que j'ai fait?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    merci :-)

    même avec ton exemple c tjrs pareil j'ai le résultat du tableau après "Tu devrais obtenir ceci :" sur ton premier message...

    en fait j'intégre cette fonction à un outil qui se debrouille pour faire la boucle ... et c'est cette variable a que je ne sais pas intégré directement à la fonction

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    C'est bizarre, de mon coté ça fonctionne bien, tu pourrais m'envoyer le script avec l'appel de ta fonction avec les données que tu as, histoire que je puisse tester dans les même condition que toi?

    Edit : Le soucis, c'est que si tu ne peux pas intégrer a dans la fonction, tu ne peux pas récupérer l'état précédent, et à moins d'utiliser une variable global pour contenir a, tu ne pourras pas la stocker dans la fonction. A la rigueur tu pourrais écrire la valeur du A précédent dans un fichier pour le sauvegarder entre deux itérations de la boucle, mais je suis pas trop fan de cette solution.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    mince en même temps:-)..

    oui dans un idle ça fonctionne bien...

    mais comme je te l'ai dit plus haut ... je dois intégrer cette variable a dans la fonction... et je ne vois pas comment

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Comme j'ai mis dans mon edit, la solution la plus simple serait de l'extraire dans un fichier et d'aller lire ce fichier à chaque appel de la fonction, ça aurait le mérite de fonctionner.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    je suis d'accord avec toi mais je n'ai pas le choix car si je le fait comme cela je n'ai plus à le lancer, le logiciel (arcgis) s'en occupe tt seul....

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Est-ce que quelque chose comme ça conviendrait? Bon bien sûr le chemin du fichier est à modifier suivant ton arbo et les droits que tu as sur la machine ^^

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    def calcul(B, C):
        try:
            with open('/tmp/test.a', b'r') as fh:
                A = fh.read()
        except IOError:
            A = ''
        if C in ("1", "2", "3", "4", "5", "6"):
            if A and not B:
                pass
            elif (not A and B) or (A and B):
                A = B
            else:
                A = ''
        else:
            A = ''
        with open('/tmp/test.a', b'w') as fh:
            fh.write(A)
        return A

    De cette manière tu n'as plus besoin de passer A en paramètre de la fonction, enfin tu peux mais elle sera écraser directement par la valeur récupérer dans le fichier, la valeur de A est retourner en sortie de la fonction. Et la variable A est pleinement intégrer à la fonction.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    je travaille avec une base sql serveur... mais je teste ta fonction ...

    merci pour le coup de main en tt cas:-)

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Bah faudrait stocker la variable A en base du coup, mais ça serait pas vraiment très propre je pense. Regarde déjà si t'arrives à avoir un résultat probant avec le code que je t'ai donner, sinon j'essaierai de réfléchir à une autre solution.

Discussions similaires

  1. Remplir une colonne en fonction d'une autre
    Par samspeed dans le forum Excel
    Réponses: 3
    Dernier message: 28/07/2014, 12h19
  2. [Toutes versions] Incrémenter une colonne en fonction d'une autre
    Par simon17 dans le forum VBA Access
    Réponses: 9
    Dernier message: 03/11/2010, 16h27
  3. [XL-2003] Compter valeurs d'une colonne en fonction d'une autre colonne
    Par greggy dans le forum Excel
    Réponses: 2
    Dernier message: 03/11/2009, 12h51
  4. Somme d'une colonne en fonction d'une autre
    Par j.mathieu dans le forum Excel
    Réponses: 6
    Dernier message: 16/08/2008, 14h55
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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