Aller à la ligne suivante python

gigi123 -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour,

J'ai 3 colonnes,
la colonne A représente le nom des produits
la colonne B représente le nom des produits
la colonne C représente la catégorie des produits
Si le nom du produit dans la colonne A = au nom du produit Colonne B (même ligne) alors le résultat sera la catégorie affiché à la colonne C (même ligne). Mais s'il ne trouve pas l'égalité, j'incrémente donc LA LIGNE (je me suis trompé tout à l'heure j'ai dis colonne) de la colonne B et la ligne de la colonne C

Voici mon code pour l'instant : 

df['Résultat']=np.where(df['Libellé']==df['Catalogue urnes'],df['Consommables'],(ici j'aimerais dire alors compare sur la ligne en dessous)

Merci 
Windows / Chrome 90.0.4430.93

4 réponses

  1. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    Bonjour,

    Le mieux serait d'afficher ton code complet ici avec les balises de code

    mode d'emploi:

    https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

    Visuellement, ça doit ressembler à ça:

    for k in range(10):
        print(k)
    
    0
    1. gigi123
       
      """Ouverture du fichier"""
      
      import pandas as pds
      import numpy as np
      var ="site"
      resultat = pds.read_excel("C:\\Users\\utilisateur\\Downloads\\"+var+".xlsx")
      df = pds.DataFrame(resultat,columns=['Libellé','Écarts de stocks'])
      
      
      """Suppression des lignes sans écarts stocks"""
      
      df.drop(df.loc[df['Écarts de stocks']==0].index, inplace=True)
      
      print("\n-----Extraction du site----\n")
      print(df)
      resultat1=pds.DataFrame(df)
      
      print("\n-----Liste catégorie----\n")
      
      """Stock du deuxieme tableau"""
      file ="C:\\Users\\utilisateur\\Desktop\\Analyse Monstock.xlsm"
      df_2 = pds.read_excel(file)
      resultat2=pds.DataFrame(df_2)
      print(resultat2)
      
      print("\n-----Concaténation des données----\n")
      
      df_1=pds.DataFrame(resultat1,columns=['Libellé'])
      
      df=pds.concat([df_1,resultat2],axis=1)
      print(df)
      
      
      
      print("\n-----Comparaison des données----\n")
      
      df['Résultat']=np.where(df['colonne A']==df['colonne B'],df['colonne C'],df.iloc['colonne B']+1)
      print(df)
      
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    Dans ton explication, tu mentionnes A, B et C, et dans ton code, tu as autre chose.  Peux-tu faire un petit effort pour donner des explications correctes?

    Cela veut dire quoi, "j'incrémente donc LA LIGNE"?

    Donne plutôt un exemple avec les données en colonnes A , B et C, et ce que tu souhaites comme résultat.

    0
  3. gigi123
     

    import pandas as pds
    import numpy as np
    var ="sites"
    resultat = pds.read_excel("C:\\Users\\utilisateur\\Downloads\\"+var+".xlsx")
    df = pds.DataFrame(resultat,columns=['Libellé','Écarts de stocks'])


    """Suppression des lignes sans écarts stocks"""

    df.drop(df.loc[df['Écarts de stocks']==0].index, inplace=True)

    print("\n-----Extraction du site----\n")
    print(df)
    resultat1=pds.DataFrame(df)

    print("\n-----Liste catégorie----\n")

    """Stock du deuxieme tableau"""
    file ="C:\\Users\\utilisateur\\Desktop\\Analyse Monstock.xlsm"
    df_2 = pds.read_excel(file)
    resultat2=pds.DataFrame(df_2)
    print(resultat2)

    print("\n-----Concaténation des données----\n")

    df_1=pds.DataFrame(resultat1,columns=['Libellé'])

    df=pds.concat([df_1,resultat2],axis=1)
    print(df)

    print("\n-----Comparaison des données----\n")

    df['Résultat']=np.where(df['colonne A']==df['Colonne B'],df['Colonne C'],df.iloc['Colonne B']+1)
    print(df)

    Exemple : 

    Colonne A ligne 1 : Papier rouge

    Colonne B ligne 1 : Papier Bleu

    Colonne C  ligne 1: Type papier A

    Si Colonne A ligne 1 n'est pas égale à la colonne B ligne 1 alors:

    on regarde colonne B ligne 2 et colonne C ligne 2 (jusqu'à l'égalité)

    si colonne B ligne 2 = colonne A ligne 1 alors on prends le résultat colonne C ligne 2

    J'espère que j'ai été clair

    Merci

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      Donne plutôt des exemples avec des données en colonnes A , B et C, et ce que tu souhaites comme résultats en colonne D.

      0
    2. gigi123 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       

      Colonne A ligne 1 = Cadre empreinte

      Colonne B ligne 1 = Boucle

      Colonne C ligne 1 = Decorative 

      Colonne B ligne 2 = Cadre empreinte

      Colonne C ligne 2 = consommables

      Comme nous avons pas la colonne B ligne 1 égale à "Cadre empreinte", on descends sur la colonne B ligne 2 et colonne C ligne 2 . Cette fois ci nous avons bien Colonne A ligne 1 = Cadre empreinte == Colonne B ligne 2 = Cadre empreinte

      En résultat colonne D on prendra donc le résultat affiché colonne C ligne 2 qui est consommables

      Colonne D = consommables 

      Merci

      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > gigi123
       

      Donne un exemple plus complet, et montre-le comme un tableau.
      Tu ne précises même pas en quelle ligne mettre "consommables" en colonne D.
      Que met-on dans les autres lignes de la colonne D?

      Je pense que tu dois faire cela via des boucles plutôt que via la fonction where().

      0
    4. gigi123 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > gigi123
       

      Donc, pour chaque ligne N, on cherche la prochaine ligne, X, où (A, N) = (B,X), et on copie (C,X) en (D,N)?

      Tu n'as pas d'idée de comment programmer cela?  Maitrises-tu les boucles en Python?

      0
  4. trauqnej Messages postés 162 Statut Membre 23
     

    Bonjour,

    d'après ce que je comprends...
     

    recupColC = ''
    
    while 1:
        if colA == colB:
            colD = colC
            # je mets ce que je trouve dans colC pour mettre dans colD
            recupColC = colC
            break
            # sortie si colA = colB (en récuperant colC dans une variable)
    
    # print(recupColC)
    
    

    S'il ne faut pas sortir dès la première égalité entre colA et colB alors enlever la ligne du while, ainsi que celle du break

    Voir à compléter l'explication si besoin.

    Cordialement,
       

    0
    1. gigi123
       

      Bonjour,

      Oui c'est à peu près ça, mais je ne vois pas où vous incrémenter la ligne si c'est pas égale?

      Merci beaucoup

      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > gigi123
       

      Tu n'as pas d'idée de comment programmer cela?  Tu progresseras mieux en essayant toi-même.

      0
    3. gigi123 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       

      Malheureusement ce n'est pas si simple comme tu le pense. Si je demande de l'aide c'est qu'auparavant j'ai essayé plein de solution (3jours bloqués)

      Pas très utile d'aller sur des forums pour répondre ça : "Tu n'as pas d'idée de comment programmer cela?  Tu progresseras mieux en essayant toi-même."

      Merci

      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > gigi123
       

      montre ce que tu as essayé.

      0
    5. gigi123 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      while 1:
          if df['Colonne A']==df['Colonne B']:
              df['Colonne D']=df['Colonne C']
              break
          else:
          df['Colonne B'].index+1 and df['Colonne C'].index+1
      
      
      0