Agrégation dans des listes python
tygrys
-
Tygrys -
Tygrys -
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
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
A voir également:
- Agrégation dans des listes python
- Citizen code python avis - Accueil - Outils
- Créer des listes déroulantes dans excel - Guide
- Liste des appareils connectés - Guide
- \R python ✓ - Forum Python
- Listes déroulantes en cascade excel - Guide
2 réponses
Bonjour,
Voici comment, en simplifiant progressivement ton code en utilisant les outils offerts par python, on arrive à condenser ton code:
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.
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.