簡體   English   中英

Pandas 分組 - 基於另一列的分組總數的百分比值

[英]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 ),對於每一行,您可以訪問tiptotal_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM