Python Pandas Grouping-基于另一列的值占分组总数的百分比
这个问题是问题的延伸 使用数据框和pandas,我试图计算出一组中每个类别的小费百分比 所以,使用tips数据库,我想看看,对于每个性别/吸烟者,女性吸烟者/所有女性和女性非吸烟者/所有女性的小费百分比是多少(男性也是如此) 当我这样做的时候Python Pandas Grouping-基于另一列的值占分组总数的百分比,python,pandas,dataframe,aggregate,aggregation,Python,Pandas,Dataframe,Aggregate,Aggregation,这个问题是问题的延伸 使用数据框和pandas,我试图计算出一组中每个类别的小费百分比 所以,使用tips数据库,我想看看,对于每个性别/吸烟者,女性吸烟者/所有女性和女性非吸烟者/所有女性的小费百分比是多少(男性也是如此) 当我这样做的时候 import pandas as pd df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',') df.groupb
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','tip']].sum()
我得到以下信息:
total_bill tip
sex smoker
Female No 977.68 149.77
Yes 593.27 96.74
Male No 1919.75 302.00
Yes 1337.07 183.07
但我正在寻找更像这样的东西
Tip Pct
Female No 0.153189183
Yes 0.163062349
Male No 0.15731215
Yes 0.136918785
其中,Tip Pct=每组的总额(Tip)/总额(账单总额)
我做错了什么?我该如何解决这个问题?谢谢大家!
我知道这会给我小费占总小费的百分比:
(df.groupby(['sex', 'smoker'])['tip'].sum().groupby(level = 0).transform(lambda x: x/x.sum()))
有没有办法修改它以查看另一列,即
(df.groupby(['sex', 'smoker'])['tip'].sum().groupby(level = 0).transform(lambda x: x/x['total_bill'].sum()))
谢谢 您可以使用
apply
在数据帧的行中循环(轴为axis=1
),对于每一行,您可以访问tip
和total\u bill
,并将其除以以获得百分比:
(df.groupby(['sex', 'smoker'])[['total_bill','tip']].sum()
.apply(lambda r: r.tip/r.total_bill, axis = 1))
#sex smoker
#Female No 0.153189
# Yes 0.163062
#Male No 0.157312
# Yes 0.136919
#dtype: float64