【问题标题】:How can I do this by using groupby?如何通过使用 groupby 来做到这一点?
【发布时间】:2017-03-05 11:03:18
【问题描述】:

我正在尝试比较 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()

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    您的列名有问题。在您的示例中,您使用的是tip_pct。数据集中的列称为tippandas.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多