我试图比较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()
答案 0 :(得分:0)
您的列名出现问题。在您的示例中,您使用的是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