À l'aide d'un cadre de données et de pandas, j'essaie de déterminer ce que représente chaque valeur en pourcentage du total général pour la catégorie "group by".
Donc, en utilisant la base de données des conseils, je veux voir, pour chaque sexe/fumeur, quelle est la proportion de la facture totale pour les femmes fumeuses / toutes les femmes et pour les femmes non-fumeuses / toutes les femmes (et la même chose pour les hommes).
Par exemple,
Si l'ensemble des données est complet :
Sex, Smoker, Day, Time, Size, Total Bill
Female,No,Sun,Dinner,2, 20
Female,No,Mon,Dinner,2, 40
Female,No,Wed,Dinner,1, 10
Female,Yes,Wed,Dinner,1, 15
Les valeurs de la première ligne seraient (20+40+10)/(20+40+10+15), car ce sont les trois autres valeurs pour les femmes non fumeuses.
La sortie devrait donc ressembler à
Female No 0.823529412
Female Yes 0.176470588
Cependant, je semble avoir quelques problèmes
Quand je fais ça,
import pandas as pd
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata- book/master/ch08/tips.csv", sep=',')
df.groupby(['sex', 'smoker'])[['total_bill']].apply(lambda x: x / x.sum()).head()
J'obtiens ce qui suit :
total_bill
0 0.017378
1 0.005386
2 0.010944
3 0.012335
4 0.025151
Il semble qu'il ignore le groupe par et le calcule juste pour chaque article de ligne.
Je cherche plutôt quelque chose comme
df.groupby(['sex', 'smoker'])[['total_bill']].sum()
Qui reviendra
total_bill
sex smoker
Female No 977.68
Yes 593.27
Male No 1919.75
Yes 1337.07
Mais je veux que cela soit exprimé en pourcentages des totaux pour le total des combinaisons individuelles sexe/fumeur ou
Female No 977.68/(977.68+593.27)
Female Yes 593.27/(977.68+593.27)
Male No 1919.75/(1919.75+1337.07)
Male Yes 1337.07/(1919.75+1337.07)
Idéalement, j'aimerais faire de même avec la colonne "conseil" en même temps.
Qu'est-ce que je fais de mal et comment puis-je réparer ça ? Merci.