IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

faire une opération dans un groupby


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut faire une opération dans un groupby
    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

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par mina75 Voir le message
    Mais je crois qu'une solution plus simple peut exister
    Quand j'ai un problème avec les données, je regarde comment elles sont construites.

    On pourrait avoir les colonnes (pays, année, cat1, cat2, cat3, cat4, cat5) et la solution à votre problème serait immédiate.

    Une ligne est l'unité d'information à laquelle on va pouvoir appliquer une opération. Votre problème est que vous avez tartiné les données sur plusieurs lignes et "cassé" la ligne: pourquoi faire?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour, merci pour votre réponse
    Dans la vraie base de données j'ai près de 10 cat (parfois juste 4 pour un pays)
    si j'ai bien compris, je dois récupérer la colonne catégorie, pour la redimensionner j'utilise reshape ?
    Mais dans ce cas je risque d'avoir beaucoup de valeurs manquantes
    ps: c'est une base de donnée qui existe

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par mina75 Voir le message
    Mais dans ce cas je risque d'avoir beaucoup de valeurs manquantes
    ps: c'est une base de donnée qui existe
    C'est un schéma utilisée côté SGDB lorsqu'on ne sait pas le nombre de colonnes qu'il y aura.
    Mais lorsque vous récupérez vos données de la base, vous savez quelles catégories vous recherchez et vous pouvez "fusionner" les lignes qui ont différentes catégories.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour, je vous remercie pour votre réponse

    Finalement, en bien cherchant dans la documentation de pandas, j'ai trouvé une autre solution

    l
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iste_groupes = df_exemple.groupby(['pays','annee']).groups
    par la suite, j'ai fais une boucle pour effectuer mon opération

    Merci pour votre conseil, je vais essayer de l'appliquer aussi

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/03/2010, 23h32
  2. [E-03] faire une opération numérique dans une textbox ?
    Par OtObOx dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/02/2009, 09h51
  3. Réponses: 2
    Dernier message: 01/04/2007, 17h41
  4. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06
  5. [XSL]faire une balise dans une balise??? (ComboBox)
    Par rastoix dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2003, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo