Python Pandas Grouping(熊猫分组)-值占分组总数的百分比不起作用

Python Pandas Grouping(熊猫分组)-值占分组总数的百分比不起作用,python,pandas,dataframe,aggregate,aggregation,Python,Pandas,Dataframe,Aggregate,Aggregation,使用数据框和pandas,我试图找出每个值在“分组依据”类别的总计中所占的百分比 所以,使用tips数据库,我想看看,对于每个性别/吸烟者,女性吸烟者/所有女性和女性非吸烟者/所有女性(男性也是如此)在总账单中所占的比例 比如说, 如果完整的数据集为: 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 F

使用数据框和pandas,我试图找出每个值在“分组依据”类别的总计中所占的百分比

所以,使用tips数据库,我想看看,对于每个性别/吸烟者,女性吸烟者/所有女性和女性非吸烟者/所有女性(男性也是如此)在总账单中所占的比例

比如说,

如果完整的数据集为:

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
第一行的值为(20+40+10)/(20+40+10+15),这是非吸烟女性的其他3个值

所以输出应该是

Female No 0.823529412
Female Yes 0.176470588
然而,我似乎遇到了一些麻烦

当我这样做的时候

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()
我得到以下信息:

    total_bill
0   0.017378
1   0.005386
2   0.010944
3   0.012335
4   0.025151
它似乎忽略了group by,而只是为每个行项目计算它

我在找更像

df.groupby(['sex', 'smoker'])[['total_bill']].sum()
哪个会回来

        total_bill
sex smoker  
Female  No  977.68
        Yes 593.27
Male    No  1919.75
       Yes  1337.07
但我想把它表示为个体性别/吸烟者组合的总数的百分比,或者

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)
理想情况下,我希望同时对“提示”列执行相同的操作


我做错了什么?我该如何解决这个问题?谢谢大家!

在获得
sum
表后,您可以添加另一个按进程分组的表来计算百分比:

(df.groupby(['sex', 'smoker'])['total_bill'].sum()
   .groupby(level = 0).transform(lambda x: x/x.sum()))   # group by sex and calculate percentage

#sex     smoker
#Female  No        0.622350
#        Yes       0.377650
#Male    No        0.589455
#        Yes       0.410545
#dtype: float64

(df.groupby(['sex','smoker'])['total_bill','tip'].sum().groupby(level=0).transform(lambda x:x/x.sum())这似乎是同时计算小费的方法。。。非常感谢。请你看一下下面的问题。谢谢