[英]Pandas Grouping - Values as Percent of Grouped Totals Based on Another Column
使用數據框和熊貓,我試圖找出一個組中每個類別的小費百分比是多少。
所以,使用小費數據庫,我想看看,對於每個性別/吸煙者,女性吸煙者/所有女性和女性非吸煙者/所有女性(男性也是如此)的小費百分比是多少
當我這樣做時,
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 = sum(tip)/sum(total_bill) 每組
我做錯了什么,我該如何解決? 謝謝!
我知道這會給我小費占總小費的百分比:
(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_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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.