分组函数应用(sql+python)总结

经常会遇见对某个字段进行分组、统计等,其中还包括一些比较细致的问题,有时往往会忘记,这里做个记录。

文章目录

      • 1. sql的分组(group by/ over())
      • 2. PYTHON分组函数使用groupby

1. sql的分组(group by/ over())

sql的分组分为两类函数,一类是直接group by,另一类就是窗口函数进行聚合。
(1) 使用分组函数的注意事项:

  • 分组函数会自动忽略NULL值,即在计算时不会将NULL值计入。
  • 分组函数只能在包含GROUP BY子句的SELECT语句中使用。
  • 在使用WHERE子句时不能直接使用分组函数,因为WHERE子句是在GROUPBY子句之前执行的。如果需要筛选分组,应使用HAVING子句
  • 分组函数可以嵌套使用,即在一个分组函数的计算结果上再进行分组。
    (2) 窗口函数
    窗口函数是一类在相关行集(即“窗口”)上进行计算的函数,这些行集由 OVER() 子句定义,可以基于 SQL 查询中的各种排序和分组条件。窗口函数可以进行复杂的分析,如运行总计、移动平均、排名等。

以下是一些常见的窗口函数及其用途:

  • ROW_NUMBER():为窗口内的每一行分配一个唯一的序号,从1开始
  • RANK() 和 DENSE_RANK():对窗口内的行进行排名,RANK() 排名时排名之间会跳号,而 DENSE_RANK() 则不会
  • LEAD() 和 LAG():访问窗口中当前行之后的(LEAD)或之前的(LAG的行
  • SUM()、AVG()、MIN()、MAX():这些聚合函数也可以作为窗口函数使用,对窗口内的行集进行计算。
  • VARIANCE() 和 STDDEV():计算窗口内数值的方差和标准差。

(3) 窗口函数通常与OVER()子句一起使用,以便定义窗口的计算方式。OVER()子句可以包含排序订单(ORDER BY)和分页(PARTITION BY)子句。

-- 为每个区域每个月的销售总额计算一个移动的总和
SELECT region, 
date_part('month', date) as month, 
SUM(sales_amount) over (partition by region order by date) as monthly_sales
FROM sales
ORDER BY region, date;

2. PYTHON分组函数使用groupby

(1) data.groupby().size().reset_index(name='')

import pandas as pd# 假设有一个DataFrame如下
data = pd.DataFrame({'A': ['a', 'a', 'b', 'b', 'a'],'B': ['one', 'two', 'one', 'two', 'one']
})# 使用groupby和size方法计算每个组的大小
grouped = data.groupby('A').size().reset_index()# 输出结果
print(grouped)

(2) transform函数

grouped=data.groupby(['pproduct_no','range']).size().reset_index(name='counts')
grouped['percentage']=grouped['counts']/grouped.groupby('product_no')['counts'].transform('sum')

.transform(‘sum’): transform方法在这里被用来对选定的列(‘counts’)中的每个分组应用一个函数。在这个例子中,函数是sum,它会计算每个分组中counts列值的和。transform方法有两个重要的特点:

  • 不会改变原始数据形状
  • 它会返回一个与原始数据相同形状的新数据,其中包含了应用了指定函数的数据。

在这个例子中,每个分组的counts列的值会被替换为该组counts列值的总和

(3) apply函数
对每个分组的数据调用某个函数

def sam_st(df,target):y=df[target]ttl_cnt=len(y)good_cnt=np.sum(y==0)bad_cnt=np.sum(y==1)bad_rate=bad_cnt/(good_cnt+bad_cnt)return pd.Series([ttl_cnt,good_cnt,bad_cnt,bad_rate],index=['TotalCnt','GoodCnt','BadCnt','BadRate'],dtype='object')
group_col=''
target=''					
data.groupby(group_col).apply(sam_st,target=target)
# sam_st里面的df代表分组之后的每个分组的数据,groupby之后就可以直接作为参数df

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

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

相关文章

服务器未启动而端口进程仍在运行如何查看并杀死

首先登录服务器然后查看当前监听的端口: sudo netstat -tuln比如这里的8080,我们此时并未启动服务器,但是它却正在运行,这会导致服务器刚启动就秒挂。如果没有日志的话会让人有点疑惑,这种情况可能是之前运行了该进程…

openssl3.2 - 官方demo学习 - pkcs12 - pkread.c

文章目录 openssl3.2 - 官方demo学习 - pkcs12 - pkread.c概述笔记END openssl3.2 - 官方demo学习 - pkcs12 - pkread.c 概述 openssl3.2 - 官方demo学习 - 索引贴 将官方demos的pkread.c 过了一下. 只要有正确的.P12证书和导出口令, 这个实验做起来很快. 程序功能, 读.P12文…

网络编程练习题(TCP)

基础练习 package test1;import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSoc…

代码随想录day17--二叉树的应用5

LeetCode654.最大二叉树 题目描述: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后…

鸿蒙开发-UI-页面路由

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 文章目录 一、基本概念 二、页面跳转 1.router基本概念 2.使用场景 3.页面跳转参数传递 三、页面返回 1.普通页面返回 2.页面返回前增加一个询问框 1.系统默认询问框 2.自定义询问框 总…

EtherCAT FP介绍系列文章—UDP gateway

EtherCAT主站上的Mailbox Gateway功能,可以用于将EtherCAT mailbox相关协议从外部设备的工具通过邮箱网关路由到EtherCAT从站设备。在EtherCAT规范中定义的所有邮箱协议在此功能中都可用,例如CoE, FoE, VoE, SoE。 但是,这里特别注意的是Mai…

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程,我的世界MOD和插件服开服教程。

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Mohist 1.20.2服务器教程,我的世界MOD和插件服开服教程。 本教程演示安装的MC服是Mohist 1.20.2版,其他版本也可以参考本教程,差别不大。 本教程使用Docker来运行mc服,可以方…

UserWarning: Glyph 39640 missing from current font问题

是因为不支持中文字体导致的,设置为一个支持中文的字体就行了。 另外,上面的改动会引起负号显示为方块,需要额外再加一条设置。 在中文系统上 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 设置为一个支持…

【leetcode刷刷】39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 一开始写的时候没注意到可以重复,注意到可以重复之后就去掉了start_index,但是出现了类似[2,2,3][2,3,2]这种重复。看了题解之后,发现加上start_index,但是进for循环的时候start_index还是i,这样就是既可…

爬虫代理如何被合理使用?静态IP怎么助力网络爬虫采集数据?

随着互联网的发展,网络爬虫作为一种重要的数据采集手段,被广泛应用于各个领域。但在实际使用中,很多用户会遇到IP被封禁、数据采集受限等问题,这些问题往往是由于不合理的代理使用导致的。本文将重点介绍如何合理使用爬虫代理&…

C#,斯特林数(Stirling Number)的算法与源代码

1 斯特林数 在组合数学,斯特林数可指两类数,第一类斯特林数和第二类斯特林数,都是由18世纪数学家James Stirling提出的。它们自18世纪以来一直吸引许多数学家的兴趣,如欧拉、柯西、西尔沃斯特和凯莱等。后来哥本哈根(…

Docker容器引擎私有仓库的搭建和管理

目录 一、私有仓库搭建和管理 (一)搭建本地私有仓库 1.拉取registry镜像 2.修改docker配置文件并重启 3.运行registry容器 4.给镜像打标签 5.上传到私有仓库 6.查看私有仓库的所有镜像 7.从私有仓库拉取镜像 (1)删除cen…

开源机器人ros 基本概念详细介绍

ROS(Robot Operating System)的基本概念构成了整个系统的框架和运作方式。以下是一些核心的基本概念: 1. 节点(Nodes): - 节点是ROS图中的基本执行单元,它是运行单个任务的一个进程。节点可以…

网络协议 UDP协议

网络协议 UDP协议 在之前的文章中有对UDP协议套接字的使用进行讲解,本文主要对UDP协议进行一些理论补充。 文章目录 网络协议 UDP协议1. 概念2. UDP协议格式2.1 数据报长度2.2 校验和/检验和2.2.1 CRC校验2.2.2 MD5算法 1. 概念 UDP,即User Datagram P…

gitlab操作手册

git操作篇 1. 项目克隆 git clone gitgitlab.test.cn:pro/project1.git2. 项目的提交 注:如果要查看文件的状态可以用git status命令: 如上图所示,文件已经修改了。 3. 项目的推送 git push origin feature/test01注:如果要查…

Qt应用软件【协议篇】modbus-tcp示例

文章目录 APIModbus TCP 主机(客户端)示例Modbus TCP 从机(服务器)示例API QModbusDevice: 所有 Modbus 设备的基类,提供了设备的基本功能,例如连接、断开连接、状态和错误处理。QModbusClient: 用于实现 Modbus 客户端功能的基类。它派生自 QModbusDevice。QModbusServ…

nodejs+vue+ElementUi宠物领养救助网站0w6wc

宠物领养救助平台采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写,使用了vue框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对用户、宠物类别、宠物…

深信服技术认证“SCSA-S”划重点:安全事件管理处置

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信…

MySQL-运维-主从复制

一、概述 二、原理 三、搭建 1、服务器准备 2、主库配置 (1)、修改配置文件/etc/my.cnf (2)、重启MySQL服务器 (3)、登录mysql,创建远程链接的账号,并授予主从复制权限 &#xff0…

shell脚本-免交互

一、Here Document免交互: 1.交互概述: 交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制该程序的运行,而不是程序单方面执行下去,程序在接受到编程人员相应的指令后而相应地做出反应。 对于…