Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算

文章目录

  • pandas_任务4.4 使用分组聚合进行组内计算
  • 4.4.1 使用groupby方法拆分数据
    • 代码 4-51 对菜品订单详情表依据订单编号分组
    • 代码 4-52 GroupBy 类求均值,标准差,中位数
    • 代码 4-53 agg和aggregate函数的参数及其说明
    • 代码 4-54 使用agg分别求字段的不同统计量
    • 代码 4-55 使用agg方法求不同字段的不同数目统计量
    • 代码 4-56 在agg方法中使用自定义函数
    • 代码 4-57 agg方法中使用的自定义函数含NumPy中的函数
  • 代码 4-58 使用agg方法做简单的聚合
    • 代码 4-59 使用ag方法对分组数据使用不同的聚合函数
  • 4.4.3 使用apply方法聚合数据
    • 代码 4-60 apply方法的基本用法
    • 代码 4-61 使用apply方法进行聚合操作
  • 使用transform 方法聚合数据
    • 代码 4-62 使用transform方法将销量和售价翻倍
    • 代码 4-63 使用transform实现组内离差标准化
  • 4.4.5任务实现
    • 代码 4-64 订单详情按照日期分组
    • 代码 4-65 求分组后的订单详情表每日菜品销售的均价,中位数
    • 代码 4-66 求取订单详情表中单日菜品总销量

 

pandas_任务4.4 使用分组聚合进行组内计算
ipynb格式浏览

4.4.1 使用groupby方法拆分数据

代码 4-51 对菜品订单详情表依据订单编号分组

import pandas as pd
import numpy as np
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/zuoye')
detail = pd.read_sql_table('meal_order_detail1',con = engine)
detailGroup = detail[['order_id','counts','amounts']].groupby(by = 'order_id')
print('分组后的订单详情表为:',detailGroup)
分组后的订单详情表为: <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002547B8C0DC8>D:\Study\anaconda\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 1")result = self._query(query)

代码 4-52 GroupBy 类求均值,标准差,中位数

print('订单详情表分组后前5组每组的均值为:\n', detailGroup.mean().head())print('订单详情表分组后前5组每组的标准差为:\n', detailGroup.std().head())print('订单详情表分组后前5组每组的大小为:','\n', detailGroup.size().head())
订单详情表分组后前5组每组的均值为:counts  amounts
order_id                 
1002      1.0000   32.000
1003      1.2500   30.125
1004      1.0625   43.875
1008      1.0000   63.000
1011      1.0000   57.700
订单详情表分组后前5组每组的标准差为:counts    amounts
order_id                    
1002      0.00000  16.000000
1003      0.46291  21.383822
1004      0.25000  31.195886
1008      0.00000  64.880660
1011      0.00000  50.077828
订单详情表分组后前5组每组的大小为: order_id
1002     7
1003     8
1004    16
1008     5
1011    10
dtype: int64

代码 4-53 agg和aggregate函数的参数及其说明

print('订单详情表的菜品销量与售价的和与均值为:\n',detail[['counts','amounts']].agg([np.sum,np.mean]))
订单详情表的菜品销量与售价的和与均值为:counts        amounts
sum   3088.000000  125992.000000
mean     1.111191      45.337172
订单详情表的菜品销量总和与售价的均值为:counts     3088.000000
amounts      45.337172
dtype: float64

代码 4-54 使用agg分别求字段的不同统计量

print('订单详情表的菜品销量总和与售价的均值为:\n',detail.agg({'counts':np.sum,'amounts':np.mean}))
订单详情表的菜品销量总和与售价的均值为:counts     3088.000000
amounts      45.337172
dtype: float64

代码 4-55 使用agg方法求不同字段的不同数目统计量

print('菜品订单详情表的菜品销量总和与售价的总和与均值为:\n',detail.agg({'counts':np.sum,'amounts':[np.mean,np.sum]}))
菜品订单详情表的菜品销量总和与售价的总和与均值为:counts        amounts
mean     NaN      45.337172
sum   3088.0  125992.000000

代码 4-56 在agg方法中使用自定义函数

##自定义函数求两倍的和
def DoubleSum(data):s = data.sum()*2return s
print('菜品订单详情表的菜品销量两倍总和为:','\n',detail.agg({'counts':DoubleSum},axis = 0))
菜品订单详情表的菜品销量两倍总和为: counts    6176.0
dtype: float64

代码 4-57 agg方法中使用的自定义函数含NumPy中的函数

def DoubleSum1(data):s = np.sum(data)*2return s
print('订单详情表的菜品销量两倍总和为:\n',detail.agg({'counts':DoubleSum1},axis = 0).head())print('订单详情表的菜品销量与售价的和的两倍为:\n',detail[['counts','amounts']].agg(DoubleSum1))
订单详情表的菜品销量两倍总和为:counts
0     2.0
1     2.0
2     2.0
3     2.0
4     2.0
订单详情表的菜品销量与售价的和的两倍为:counts       6176.0
amounts    251984.0
dtype: float64

代码 4-58 使用agg方法做简单的聚合

print('订单详情表分组后前3组每组的均值为:\n', detailGroup.agg(np.mean).head(3))print('订单详情表分组后前3组每组的标准差为:\n', detailGroup.agg(np.std).head(3))
订单详情表分组后前3组每组的均值为:counts  amounts
order_id                 
1002      1.0000   32.000
1003      1.2500   30.125
1004      1.0625   43.875
订单详情表分组后前3组每组的标准差为:counts    amounts
order_id                    
1002      0.00000  16.000000
1003      0.46291  21.383822
1004      0.25000  31.195886

代码 4-59 使用ag方法对分组数据使用不同的聚合函数

print('订单详情分组前3组每组菜品总数和售价均值为:\n', detailGroup.agg({'counts':np.sum,'amounts':np.mean}).head(3))
订单详情分组前3组每组菜品总数和售价均值为:counts  amounts
order_id                 
1002         7.0   32.000
1003        10.0   30.125
1004        17.0   43.875

4.4.3 使用apply方法聚合数据

代码 4-60 apply方法的基本用法

print('订单详情表的菜品销量与售价的均值为:\n',detail[['counts','amounts']].apply(np.mean))
订单详情表的菜品销量与售价的均值为:counts      1.111191
amounts    45.337172
dtype: float64

代码 4-61 使用apply方法进行聚合操作

print('订单详情表分组后前3组每组的均值为:','\n', detailGroup.apply(np.mean).head(3))
print('订单详情表分组后前3组每组的标准差为:','\n', detailGroup.apply(np.std).head(3))
订单详情表分组后前3组每组的均值为: order_id  counts  amounts
order_id                               
1002      1.431572e+26  1.0000   32.000
1003      1.253875e+30  1.2500   30.125
1004      6.275628e+61  1.0625   43.875
订单详情表分组后前3组每组的标准差为: counts    amounts
order_id                     
1002      0.000000  14.813122
1003      0.433013  20.002734
1004      0.242061  30.205287

使用transform 方法聚合数据

transform方法能够对整个DataFrame的所有元素进行操作。且transform方法只有一个参数“func”,表示对DataFrame操作的函数。

代码 4-62 使用transform方法将销量和售价翻倍

print('订单详情表的菜品销量与售价的两倍为:\n',detail[['counts','amounts']].transform(lambda x:x*2).head(4))
订单详情表的菜品销量与售价的两倍为:counts  amounts
0     2.0     98.0
1     2.0     96.0
2     2.0     60.0
3     2.0     50.0

代码 4-63 使用transform实现组内离差标准化

同时transform方法还能够对DataFrame分组后的对象GroupBy进行操作,可以实现组内离差标准化等操作。

# print('订单详情表分组后实现组内离差标准化后前五行为:\n', 
#       detailGroup.transform(lambda x:(x.mean()
#             -x.min())/(x.max()-x.min())).head())

若在计算离差标准化的时候结果中有NaN,这是由于根据离差标准化公式,最大值和最小值相同的情况下分母是0。而分母为0的数在Python中表示为NaN。
但是这里会报ZeroDivisionError: float division by zero的bug ,就是分母为0了,奇奇怪怪感觉,书上的运行得了

4.4.5任务实现

代码 4-64 订单详情按照日期分组

detail = pd.read_sql_table('meal_order_detail1',con = engine)
detail['place_order_time'] = pd.to_datetime(detail['place_order_time'])
detail['date'] = [i.date() for i in detail['place_order_time']]
detailGroup = detail[['date','counts','amounts']].groupby(by='date')
print('订单详情表前5组每组的数目为:\n',detailGroup.size().head())
订单详情表前5组每组的数目为:date
2016-08-01    217
2016-08-02    138
2016-08-03    157
2016-08-04    144
2016-08-05    193
dtype: int64

代码 4-65 求分组后的订单详情表每日菜品销售的均价,中位数

dayMean = detailGroup.agg({'amounts':np.mean})
print('订单详情表前五组每日菜品均价为:\n',dayMean.head())dayMedian = detailGroup.agg({'amounts':np.median})
print('订单详情表前五组每日菜品售价中位数为:\n',dayMedian.head())
订单详情表前五组每日菜品均价为:amounts
date                 
2016-08-01  43.161290
2016-08-02  44.384058
2016-08-03  43.885350
2016-08-04  52.423611
2016-08-05  44.927461
订单详情表前五组每日菜品售价中位数为:amounts
date               
2016-08-01     33.0
2016-08-02     35.0
2016-08-03     38.0
2016-08-04     39.0
2016-08-05     37.0

代码 4-66 求取订单详情表中单日菜品总销量

daySaleSum = detailGroup.apply(np.sum)['counts']
print('订单详情表前五组每日菜品售出数目为:\n',daySaleSum.head())
订单详情表前五组每日菜品售出数目为:date
2016-08-01    233.0
2016-08-02    151.0
2016-08-03    192.0
2016-08-04    169.0
2016-08-05    224.0
Name: counts, dtype: float64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

陕西理工大学计算机科学与技术系,陕西理工大学计算机科学与技术专业2016年在陕西理科高考录取最低分数线...

类似问题答案南京理工大学计算机类(计算机科学与技术、软件工程、网络工程、智能科学与工程)专业2...学校 地 区 专业 年份 批次 类型 分数 南京理工大学 陕西 计算机类(计算机科学与技术、软件工程、网络工程、智能科学与工程) 2016 一批 理科 563 南京理工大学 陕西 计算机类…

高拍仪拍照SDK开发(良田影像S300L|S500L)

高拍仪拍照SDK开发下载地址&#xff1a;点击下载 本SDK适用于&#xff1a;良田影像S300L|S500L 高拍仪如图&#xff1a; SDN开发包安装之后找到安装目录&#xff0c;如图&#xff1a; 大家找到各自需要的版本即可&#xff0c;需要注意的是如果需要上传图片到服务器的话&#…

Pandas 文件读取和导出

Pandas 文件读取和导出 更新时间&#xff1a;2020-12-28 00:16:20标签&#xff1a;pandas io 说明 Pandas 中文教程修订中&#xff0c;欢迎加微信 sinbam 提供建议、纠错、催更。查看更新日志 我们拿到的数据一般是 CSV、Excel 等格式&#xff0c;将文件加载到 Pandas 的 D…

gitlab的用户使用手册

最近比较忙&#xff0c;没时间写博客&#xff0c;今天来的早所以写一篇关于gitlab的使用手册分享给大家。目录一、账户/项目申请二、登陆与修改密码三、SSH Key导入四、上传/下载代码1、上传&#xff08;用户系统为linux&#xff09;2、下载&#xff08;用户系统为linux&#x…

学计算机多久能拿证,计算机证书多久能领取 什么时候拿

计算机证书多久能领取&#xff0c;什么时候能拿&#xff0c;小编整理了相关信息&#xff0c;希望会对大家有所帮助&#xff01;计算机证书什么时候能领取1、一般情况下是考试结束后50个工作日左右出成绩及出证。全国计算机等级考试证书一年两次考试。每年的3月与9月考试。2、证…

MySQL_0

2019独角兽企业重金招聘Python工程师标准>>> 网址&#xff1a; http://www.mysqlpub.com 转载于:https://my.oschina.net/u/194743/blog/160145

TensorFlow 2.0 mnist手写数字识别(CNN卷积神经网络)

TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积神经网络工作原理&#xff0c;推荐一个bilibili的讲卷积神经网络的视频&#xff0c;up主从youtube搬运过来&#xff0c;用中文讲了一遍。…

计算机组成原理第06章在线测试,计算机组成原理第六章单元测试(二)(含答案)(4页)-原创力文档...

PAGEPAGE 1第六章单元测验 (二)书生1、用以指定待执行指令所在主存地址的寄存器是______。(单选)????A、指令寄存器IR????B、程序计数器PC????C、存储器地址寄存器MAR????D、数据缓冲寄存器2、下列关于微程序和微指令的叙述中______是正确的。(单选)????A、…

前端笔试练习一

前端笔试练习一 请编写一段程序&#xff0c;将一个对象和它直接、间接引用的所有对象的属性字符串放入一个数组。如var o {a:1,{b:2,c:{d:1}}}这里o经过处理后&#xff0c;应该得到["a","b","c","d"] 1 <!DOCTYPE html PUBLIC &qu…

职业梦想是计算机的英语作文,理想职业英语作文2篇

篇一&#xff1a;大学英语作文之我理想的工作my ideal jobMy Ideal JobAs college students, we will step into the society, and now we need to prepare for our future and arrange for our future career life, we need to take into consideration what to do in the fut…

C语言二维数组中的指针问题

#include "stdio.h" void main() {int a[5][5];int i,j;for (i0;i<5;i){for (j0;j<5;j){a[i][j] i;}} for (i0;i<5;i){for (j0;j<5;j){printf("%d ",a[i][j]);}printf("\n");} }转载于:https://blog.51cto.com/shamrock/12…

爬取微信小程序源码

爬取微信小程序源码 想知道爬取微信小程序有多简单吗&#xff1f;一张图、三个步骤&#xff0c;拿到你想要的任何微信小程序源码。

C#对称加密(AES加密)每次生成的密文结果不同思路代码分享

思路&#xff1a;使用随机向量&#xff0c;把随机向量放入密文中&#xff0c;每次解密时从密文中截取前16位&#xff0c;其实就是我们之前加密的随机向量。 代码 public static string Encrypt(string plainText, string AESKey){RijndaelManaged rijndaelCipher new Rijndael…

计算机音乐简谱图片,1(音乐简谱基本音级)_百度百科

1是指在音乐简谱中的音乐简谱基本音级。[1]1代表音阶中的1个基本音级&#xff0c;读音为Do(谐音汉字“哆”)&#xff0c;在C大调里唱Do。常用来表示音级第一位或首位。中文名哆外文名do术语范围音 高C大调里的Do英 文One在音乐简谱中&#xff0c;1代表音阶中的1个基本音级…

马老师 生产环境mysql主从复制、架构优化方案

Binlog日志(主服务器) > 中继日志(从服务器 运行一遍,保持一致)。从服务器是否要二进制日志取决于架构设计。如果二进制保存足够稳定&#xff0c;从性能上来说&#xff0c;从服务器不需要二进制日志。默认情况下&#xff0c;mysql主从复制是异步的。 异步&#xff1a;命令写…

10分钟带你学会微信小程序的反编译

以xxxxx小程序为例10分钟带你学会微信小程序的反编译 2019-11-28 12:59:26 以一个简单的例子介绍下小程序反编译操作流程 实验环境前置准备模拟器内软件安装获取小程序包开始解包导入开发者工具补充注意事项技术交流群有偿解包uniapp 逆向服务逆向教程小程序分包教程#实验环境…

中html倒入css那么套路,CSS常用套路

a标签去除原颜色(改为白色)和下划线text-decoration: none;color: #ffffff;列表标签去除默认小点:list-style-type:none;设置元素透明度&#xff1a;opacity:0.5;页面中文字无法被选中&#xff1a;user-select: none;鼠标悬停&#xff0c;样式变化的方法&#xff1a;a:hover {o…

try catch finally的执行顺序到底是怎样的?

首先执行try&#xff0c;如果有异常执行catch&#xff0c;无论如何都会执行finally一个函数中肯定会执行finally中的部分。 关于一个函数的执行过程是&#xff0c;当有return以后&#xff0c;函数就会把这个数据存储在某个位置&#xff0c;然后告诉主函数&#xff0c;我不执行了…

反编译Android APK详细操作指南

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章&#xff0c;在该文章中我对如何在Windows平台反编译APK做了讲解&#xff0c;如今用Mac系统的同学越来越多&#xff0c;也有很多朋友问我能否出一篇关于如何在Mac平台上反编译APK的文章&#xff0c;今天呢…

Ext.grid.CheckboxSelectionModel状态设置

直接上代码&#xff1a; var model grid.getSelectionModel();model.selectAll();//选择所有行model.selectFirstRow();//选择第一行model.selectLastRow([flag]);//选择最后一行,flag为正的话保持当前已经选中的行数,不填则默认falsemodel.selectNext();//选择下一行model.se…