Bonjour,
Je débute mon apprentissage de python pour Data Analyst et je rencontre un problème

Pour simplifier, je dirais que j'ai besoin de faire une opération sur deux lignes pour chaque pays et chaque année
Supposant que nous avons une liste de pays, et une liste d'année :
Pour chaque pays = x et chaque année = y, je souhaite faire une opération de type (categorie = cat2)*5 / (categorie = cat3)

J'ai pensé à faire une boucle imbriqué (voir le code)


Code : 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
import pandas as pd
 
data = {'pays': ['France', 'France', 'France','France','France', 'France', 'France','France', 'Espagne', 'Espagne', 'Espagne', 'Espagne', 'Espagne', 'Espagne', 'Espagne', 'Espagne'],\
    'annee': [2000, 2000, 2000, 2000, 2002, 2002, 2002, 2002, 2000, 2000, 2000, 2000, 2002, 2002, 2002, 2002],\
    'categorie': ['cat1', 'cat2', 'cat3', 'cat4' ,'cat1', 'cat2', 'cat3', 'cat4' ,'cat1', 'cat2', 'cat3', 'cat4' ,'cat1', 'cat2', 'cat3', 'cat4' ], \
    'valeur': np.random.randn(16)   }
 
df_exemple = pd.DataFrame(data)
 
c= []
for pays in ['France','Espagne']:  #la série pays sans duplications
    df_pays = df_exemple[df_exemple['pays']==pays]
 
    for annee in [2000,2002]:  #la série année sans duplications
        df_annee = df_pays[df_pays['annee']==annee]
        a = df_annee[df_annee['categorie']=='cat2']['valeur'].iloc[0]  * 5
        b = df_annee[df_annee['categorie']=='cat3']['valeur'].iloc[0]
        c.append(a/b)
print ("c=",c)
J'ai pensé aussi à une autre solution en 3 étapes :

1 : supprimer toutes les lignes qui ne m'intéressent pas
2 : rajouter une nouvelle colonne si catégorie = cat2 nouvelle valeur = valeur_cat2*5
si catégorie = cat 3 nouvelle valeur = 1/valeur_cat3
3 : faire groupby avec product


Mais je crois qu'une solution plus simple peut exister
Merci d'avance pour votre aide