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 - Accueil - Outils
- Créer des listes déroulantes dans excel - Guide
- Liste des appareils connectés - Guide
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - 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.