繁体   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