簡體   English   中英

如何使用groupby執行此操作?

[英]How can I do this by using groupby?

我正在嘗試比較pandas.DataFrame.pivot_table()pandas.DataFrame.groupby 我有一個關於提示的經典數據集:

import pandas as pd  
url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'  
tips = pd.read_csv(url)

現在,我想只聚合tip_pct和size,並且還要按天分組。 我會將吸煙者放在表格列中,將日期放在行中。 通過使用pivot_table我可以這樣做:

tips.pivot_table(['tip_pct', 'size'], index=['sex', 'day'], columns='smoker')

但是現在我怎么能用groupby完成這個任務呢? 我試過但結果並不像預期的那樣:

tips.groupby(['sex', 'day'])['tip_pct', 'size'].mean()

您的列名稱有問題。 在您的示例中,您使用的是tip_pct 數據集中的列稱為tip pandas.DataFrame.pivot_table()愉快地忽略了這個缺失的列,而pandas.DataFrame.groupby()抱怨。

碼:

import pandas as pd  
url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'  
tips = pd.read_csv(url)

print(tips.groupby(['sex', 'day', 'smoker'])['tip', 'size'].mean())

結果:

                         tip      size
sex    day  smoker                    
Female Fri  No      3.125000  2.500000
            Yes     2.682857  2.000000
       Sat  No      2.724615  2.307692
            Yes     2.868667  2.200000
       Sun  No      3.329286  3.071429
            Yes     3.500000  2.500000
       Thur No      2.459600  2.480000
            Yes     2.990000  2.428571
Male   Fri  No      2.500000  2.000000
            Yes     2.741250  2.125000
       Sat  No      3.256563  2.656250
            Yes     2.879259  2.629630
       Sun  No      3.115349  2.883721
            Yes     3.521333  2.600000
       Thur No      2.941500  2.500000
            Yes     3.058000  2.300000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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