Agrégation dans des listes python

Bonjour,

Comme vous pouvez le voir je débute en programmation. Je voulais savoir comment réaliser cette opération de manière propre en Python. Il s'agit d'agréger les valeurs d'un champ nommé "valeur" à partir d'un champ contenant des identifiants. Il s'agit en quelque sorte de réaliser un group by et une opération d'agrégation comme on le ferait en SQL

#liste des identifiants des enregistrements
ID= [1,2,1,2,4,3,3,3,5,5,1,5,5,1,2,2,2]

#liste des valeurs associées enregistrements
valeur=[1,4,15,16,23,27,48,50,55,67,90,101,200,250,260,270,300]

#liste unique des identifiants
IDunique=[1,2,3,4,5]

#liste vide
li3=[]

for i in range(0, len(IDunique)): #boucle dans les ID uniques
li3.append([elt== IDunique[i] for elt in ID])
li4=li3[i] #créer une variable li4 accueillant les sous-listes
li5=[]#créer une variable vide li5
for j in range(0, len(li4)):#bouble dans les sous-listes
if li4[j]==True:#test si la valeur est True
li5.append(valeur[j])#ajoute la valeur de liste valeur si la valeur est True
moyenne= sum(li5)/len(li5) #calcul la moyenne des sous-listes
minnus=min(li5)#calcul la valeur minimale
maxus= max(li5)#calcul la valeur maximale
print IDunique[i],moyenne, minnus,maxus #print l'IDunique, la moyenne, le min, le max

2 réponses

  1. Merci beaucoup pour ta réponse.
    Je jette un coup d'oeil au code et au site que tu m'as indiqué.

    Merci encore
    1. Bonjour,

      Voici comment, en simplifiant progressivement ton code en utilisant les outils offerts par python, on arrive à condenser ton code:

      #liste des identifiants des enregistrements   
      ID= [1,2,1,2,4,3,3,3,5,5,1,5,5,1,2,2,2]   
      
      #liste des valeurs associées enregistrements   
      valeur=[1,4,15,16,23,27,48,50,55,67,90,101,200,250,260,270,300]   
      
      #liste unique des identifiants   
      IDunique=[1,2,3,4,5]   
      
      #liste vide   
      li3=[]   
      
      for i in range(0, len(IDunique)): #boucle dans les ID uniques  
          print 'i ==',i,'   IDunique[i] ==',IDunique[i]  
          li3.append([elt== IDunique[i] for elt in ID])  
          li4=li3[i] #créer une variable li4 accueillant les sous-listes  
          print 'li4 ==',li4  
            
          li5=[]#créer une variable vide li5  
          for j in range(0, len(li4)):#boucle dans les sous-listes   
              if li4[j]==True:#test si la valeur est True   
                  li5.append(valeur[j])#ajoute la valeur de liste valeur si la valeur est True  
          print 'li5 ==',li5  
            
          moyenne= sum(li5)/len(li5) #calcul la moyenne des sous-listes   
          minnus=min(li5)#calcul la valeur minimale   
          maxus= max(li5)#calcul la valeur maximale   
          print IDunique[i],' : ',moyenne, minnus,maxus #print l'IDunique, la moyenne, le min, le max   
          print  
      
      
      print '\n -1-  #################################'  
      for x in IDunique:  
          li4 = [elt== x for elt in ID]  
          print 'li4 ==',li4  
            
          li5=[]  
          for j,y in enumerate(li4):   
              if y:   
                  li5.append(valeur[j])  
          print 'li5 ==',li5  
            
          moyenne,minnus,maxus= sum(li5)/len(li5),min(li5),max(li5)   
          print 'x de IDunique ==',x,' : ',moyenne, minnus,maxus  
          print  
      
      
      print '\n -2-  #################################'  
      for x in IDunique:  
          li4 = [elt== x for elt in ID]  
          print 'li4 ==',li4  
            
          li5 = [ valeur[j] for j,y in enumerate(li4) if y ]  
          print 'li5 ==',li5  
            
          moyenne,minnus,maxus= sum(li5)/len(li5),min(li5),max(li5)   
          print 'x de IDunique ==',x,' : ',moyenne, minnus,maxus  
          print  
      
      
      print '\n -3-  #################################'  
      for x in IDunique:  
          li = [ valeur[j] for j,z in enumerate(ID) if z==x ]  
          print 'li ==',li  
            
          moyenne,minnus,maxus= sum(li)/len(li),min(li),max(li)   
          print 'x de IDunique ==',x,' : ',moyenne, minnus,maxus   
          print  
      
            
      print '\n -4-  #################################'  
      for x in IDunique:  
          li = [b for a,b in zip(ID,valeur) if a==x]  
          print 'li ==',li  
          tu = (x,sum(li)/len(li),min(li),max(li))  
          print '%s :  %s , %s , %s' % tu  
          print  
      
      
      print '\n -5-  #################################'  
      for x in IDunique:  
          li = [b for a,b in zip(ID,valeur) if a==x]  
          tu = (x,sum(li)/len(li),min(li),max(li))  
          print '%4s :  %7s , %7s , %7s' % tu  
          print  
      
      
      print '\n -6-  #################################'  
      def func(x, zozo = zip(ID,valeur)):  
          li = [b for a,b in zip(ID,valeur) if a==x]  
          return (x,sum(li)/len(li),min(li),max(li))  
      
      litu = [func(x) for x in IDunique]  
      print '\n'.join('%4s :  %7s , %7s , %7s' % tu  
                      for tu in litu)


      Tu devrais aller sur le forum Python de developpez.com pour les questions sur ce langage, il y a une super équipe, sympa et très compétente.