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

Python Discussion :

Pourcentage arrondi d'une valeur distincte dans l'ensemble des valeurs de cette colonne


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 18
    Par défaut Pourcentage arrondi d'une valeur distincte dans l'ensemble des valeurs de cette colonne
    Bonjour;

    Je débute en Python et j'aurais besoin de votre aide.
    Dans mon dataframe (df), j'ai une colonne (FRUIT) qui peut contenir plusieurs valeurs distinctes ("POMMES" ; "POIRES" ; "ORANGES" etc...)
    Chaque ligne de mon dataframe, pour cette colonne, ne contiendra qu'une et une seule valeur.

    ID;FRUIT;
    1;'ORANGES';
    2;'ORANGES';
    3;'POMMES';
    4;'ORANGES';
    5;'ORANGES';
    6;'CITRONS';
    7;'CITRONS';
    8;'ORANGES';
    9;'ORANGES';
    10;'ORANGES';
    11';ORANGES';
    12';'POMMES';
    13';ORANGES';
    14';ORANGES';
    15;'ORANGES';
    16;'ORANGES';
    17;'ORANGES';
    18;'POIRES';
    18;'ORANGES';
    20;'ORANGES';
    J'aimerais pouvoir, uniquement en se basant sur le colonne FRUIT, savoir dire quel est le pourcentage arrondi à 2 chiffres que peut représenter un fruit (ex : ORANGES") sur la totalité de la colonne FRUIT.

    Je sais avoir le nombre de chaque modalité de cette colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    df2=df['FRUIT'].value_counts()
    Mais là ce que je veux c'est avoir (directement ou dans une colonne supplémentaire de df2) le % de chaque valeur de FRUIT.
    Et là je bloque pour avoir directement la valeur de "ORANGES" dans "FRUIT"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    round((df.['FRUIT'].sum() * 100) / len(df.['FRUIT']),2)
    Par avance merci

    Cordialement

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Hello,

    Je connais pas Pandas, mais un truc du style,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from collections import Counter
    frequences = Counter(df["FRUIT"])
    print(frequences)
    ne donnerait pas quelque chose de sympa ?

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 18
    Par défaut
    En fait ceci me donne le nombre de fois qu'apparait chaque libellé dans la totalité de la colonne concernée, cela donne la même chose que mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    df2=df['FRUIT'].value_counts()
    Moi je cherche à avoir pour chaque valeur unique de la colonne "FRUIT", son pourcentage par rapport aux nombre de valeur totales de cette colonne.
    Par exemple, j'ai 20 lignes dans mon DATAFRAME et aucune ligne vide ou non alimentée dans la colonne FRUIT.
    J'ai 2 fois la valeur "POMMES"
    J'ai 2 fois la valeur "CITRONS"
    J'ai 1 fois la valeur "POIRES"
    J'ai 15 fois la valeur "ORANGES"

    donc j'attends un résultat comme :

    POMMES ; 10,00%
    CITRONS ; 10,00%
    POIRES ; 5,00%
    ORANGES ; 75,00%
    pour la totalité de la colonne FRUIT

    Et, en plus (en bonus), comment demander non pas pour toutes les modalités de la colonne FRUIT, mais juste pour une seule ?
    En effet, imaginons que j'ai 300 valeurs de fruits différentes et que je recherche uniquement le % d'un seul fruit, j'ai pas envie de regarder les 300 lignes de pourcentage

    Merci pour votre aide :-)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par gonosen59 Voir le message
    En fait ceci me donne le nombre de fois qu'apparait chaque libellé dans la totalité de la colonne concernée
    Ben tu multiplies par 100 et tu divises par la taille de ta colonne !

    Accessoirement dans ton exemple il y a 2 fois la valeur 18.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par gonosen59 Voir le message
    En fait ceci me donne le nombre de fois qu'apparait chaque libellé dans la totalité de la colonne concernée, cela donne la même chose que mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    df2=df['FRUIT'].value_counts()
    Moi je cherche à avoir pour chaque valeur unique de la colonne "FRUIT", son pourcentage par rapport aux nombre de valeur totales de cette colonne.
    Par exemple, j'ai 20 lignes dans mon DATAFRAME et aucune ligne vide ou non alimentée dans la colonne FRUIT.
    J'ai 2 fois la valeur "POMMES"
    J'ai 2 fois la valeur "CITRONS"
    J'ai 1 fois la valeur "POIRES"
    J'ai 15 fois la valeur "ORANGES"

    donc j'attends un résultat comme :



    pour la totalité de la colonne FRUIT

    Et, en plus (en bonus), comment demander non pas pour toutes les modalités de la colonne FRUIT, mais juste pour une seule ?
    En effet, imaginons que j'ai 300 valeurs de fruits différentes et que je recherche uniquement le % d'un seul fruit, j'ai pas envie de regarder les 300 lignes de pourcentage

    Merci pour votre aide :-)
    J'adore ! Je propose une solution, et après tests, ça me montre même pas le résultat pour que je puisse en juger par moi même.

    Pour info, le résultat entre les deux n'ont absolument rien à voir, les types sont différents, car Counter renvoie un dictionnaire qu'on peut manipuler aisément.

    ça donne cette ligne Counter({'ORANGES': 15, 'POMMES': 2, 'CITRONS': 2, 'POIRES': 1})et là c'est quand même simple !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my_sum = sum(fruits.values())
    for key in fruits:
        fruits[key] = (fruits[key] / my_sum) * 100
     
    print(fruits)
    qui donne

    Counter({'ORANGES': 75.0, 'POMMES': 10.0, 'CITRONS': 10.0, 'POIRES': 5.0})Si on se donne même pas la peine d'analyser les solutions proposées alors on se débrouille seul, sinon on demande directement la réponse, sans passer par cette impression de vouloir apprendre.

    Je suis sûr qu'une solution existe en pure pandas, mais j'ai cru comprendre que Counter était plus efficace.

    Sinon les données sont mal formées, il n'y a pas de guillemet dans un fichier texte ou csv, donc à virer pour simplifier le traitement.

  6. #6
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Août 2016
    Messages : 18
    Par défaut
    Bonjour,

    Toutes mes excuses fred1599, l'exemple que je citais dans mon post était une transformation de mes données réelles. J'ai remplacé le libellé d'une de mes colonnes de mon dataframe par "FRUITS" et les modalités de cette colonne par des noms de fruits. C'est pour cela que les données dans ce post, en effet, sont mal formatées car non issues de mes données réelles.
    Une nouvelle fois, toutes mes excuses et en aucun cas je n'ai voulu être désobligeant au regard de l'aide que tu m'as apporté dans tes réponses.

    Pour ma part, j'avais avancé de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print((round((df['FRUIT']=="POMMES").value_counts(True),4))*100)
    Mais la visualisation du résultat n'était pas bien utilisable simplement, même si le résultat est exact :
    False 90.00
    True 10.00
    Name: FRUIT, dtype: float64
    Ta façon de procéder est plus propre et plus utilisable.
    Je te te remercie pour ton aide.

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    De rien

    Mais faîtes attention à être plus rigoureux dans vos topics, ça permet entre autres, d'avoir des réponses bien plus rapides et précises sur vos questionnements.

    Posez-vous la question suivante: Est-ce que le lecteur peut reproduire, tester mon erreur, a toutes les informations pour faire le test, savoir ce qui entre, et ce qui doit en ressortir, .... ?

    Ça, ce n'est pas à nous, ni de poser ce type de question, ni deviner l'objectif de l'exercice. Sans ça, vous risquez de perdurer dans le temps avant d'avoir une réponse convenable, ou pire, ne trouvez aucune réponse à votre question.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Je suis sûr qu'une solution existe en pure pandas, mais j'ai cru comprendre que Counter était plus efficace.
    Il suffit d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df2=df['FRUIT'].value_counts(normalize=True)
    Quand on se lance à utiliser pandas, on devrait savoir déjà programmer.

    Ce qui passe par justifier utiliser pandas dans un cas aussi simple où Counter serait plus naturel.

    Et si on se lance à la découverte de pandas, on sait ouvrir la documentation, chercher sur Internet, ou faire le tour de pandas en passant du temps dans un tuto.

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

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bien vu @wiztricks

    et si on veut le pourcentage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    df2=df['FRUIT'].value_counts(normalize=True) * 100

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 19
    Dernier message: 19/06/2019, 10h24
  2. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  3. arrondi d'une valeur
    Par Destiny dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/08/2007, 10h18
  4. obtenir l arrondi d une valeur
    Par morrison29 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/11/2006, 18h21
  5. HELP , Arrondis d'une valeur entiere
    Par hash92 dans le forum ASP
    Réponses: 7
    Dernier message: 10/11/2005, 20h32

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