使用agg方法聚合数据
准备数据
准备数据meal_order_info.csv,并将meal_order_info.csv数据放到Linux本地/course/DataAnalyze/data目录。
使用agg方法聚合数据
- 以T餐饮企业的菜品订单信息表为例,可以使用agg方法一次求出当前数据中所有菜品销量和售价的总和与均值,如代码 43所示。
代码 43 使用agg求出所有字段对应的统计量
In[5]: | print('订单详情表的菜品销量与售价的和与均值为:\n', detail[['counts','amounts']].agg([np.sum,np.mean])) |
Out[5]: | 订单详情表的菜品销量与售价的和与均值为: counts amounts sum 3088.000000 125992.000000 mean 1.111191 45.337172 |
- 代码 43中使用求和与求均值的函数求出“counts”和“amounts”两个字段的和与均值。使用agg分别求字段的不同统计量,如代码 44所示。
代码 44 使用agg分别求字段的不同统计量
In[6]: | print('订单详情表的菜品销量总和与售价的均值为:\n', detail.agg({'counts':np.sum,'amounts':np.mean})) |
Out[6]: | 订单详情表的菜品销量总和与售价的均值为: counts 3088.000000 amounts 45.337172 dtype: float64 |
- 在某些时候还希望求出某个字段的多个统计量,某些字段则只需要求一个统计量,此时只需要将字典对应key的value变为列表,列表元素为多个目标的统计量即可,如代码 45所示。
代码 45 使用agg方法求不同字段不同数目统计量
In[7]: | print('菜品订单详情表的菜品销量总和与售价的总和与均值为:\n', detail.agg({'counts':np.sum,'amounts':[np.mean,np.sum]})) |
Out[7]: | 菜品订单详情表的菜品销量总和与售价的总和与均值为: counts amounts mean NaN 45.337172 sum 3088.0 125992.000000 |
- 在agg方法可传入读者自定义的函数,如代码 46所示。
代码 46 在agg方法中使用自定义函数
In[8]: | ##自定义函数求两倍的和 def DoubleSum(data): s = data.sum()*2 return s print('菜品订单详情表的菜品销量两倍总和为:','\n', detail.agg({'counts':DoubleSum},axis = 0)) |
Out[8]: | 菜品订单详情表的菜品销量两倍总和为: counts 6176.0 dtype: float64 |
- 使用自定义函数需要注意的是NumPy库中的函数能够在agg中直接使用,如代码 47所示。
代码 47 agg方法中使用自定义函数含NumPy中的函数
In[9]: | def DoubleSum1(data): s = data.sum()*2 return s print('菜品订单详情表的菜品销量两倍总和为:','\n', detail.agg({'counts':DoubleSum1},axis = 0)) |
Out[9]: | 菜品订单详情表的菜品销量两倍总和为: counts 6176.0 dtype: float64 |
In[10]: | print('订单详情表的菜品销量与售价的和的两倍为:\n', detail[['counts','amounts']].agg(DoubleSum1)) |
Out[10]: | 订单详情表的菜品销量与售价的和的两倍为: counts 6176.0 amounts 251984.0 dtype: float64 |
- 使用agg方法也能够实现对每一个字段每一组使用相同的函数,如代码 48所示。
代码 48 使用apply,agg方法做简单的聚合
In[11]: | print('订单详情表分组后前3组每组的均值为:\n', detailGroup.agg(np.mean).head(3)) |
Out[11]: | 订单详情表分组后前 3 组每组的均值为: counts amounts order_id 137 1.500000 32.333333 165 1.166667 52.944444 166 1.400000 48.200000 |
In[12]: | print('订单详情表分组后前3组每组的标准差为:\n', detailGroup.agg(np.std).head(3)) |
Out[12]: | 订单详情表分组后前 3 组每组的标准差为: counts amounts order_id 137 1.224745 35.200379 165 0.383482 52.193613 166 0.547723 41.829415 |
- 使用agg方法对分组后的菜品订单表求取每组菜品总数和售价均值,如代码 49所示。
代码 49 使用agg方法对分组数据使用不同聚合函数
In[13]: | print('订单详情分组前3组每组菜品总数和售价均值为:\n', detailGroup.agg({'counts':np.sum,'amounts':np.mean}).head(3)) |
Out[13]: | 订单详情分组前 3 组每组菜品总数和售价均值为: counts amounts order_id 137 9 32.333333 165 21 52.944444 166 7 48.200000 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)