【Pandas与SQL系列】Pandas实现分布函数percent_rank、cume_dist

目录

    • 1,分布函数,
      • 1.1,percent_rank()
      • 1.2,cume_dist()
      • 1.3 SQL例子
    • 2,Pandas 实现
    • 3,补充Pandas实现排序

1,分布函数,

应用场景:快速查看某个记录所归属的组内的比例
分布函数分类及基础语法:

percent_rank()over(partition by 分区字段 order by 排序字段 desc/asc);
cume_dist()over (partition by 分区字段 order by 排序字段 desc/asc);

1.1,percent_rank()

显示的结果,每行按照如下公式进行计算: (rank-1)/(rows-1)
rank 为 RANK() 函数产生的序号,rows 为当前窗口的记录总行数
对于重复值,取重复值的第一行记录的位置

1.2,cume_dist()

显示的结果,每行按照如下公式进行计算:rank/rows
rank 为 RANK() 函数产生的序号,rows 为当前窗口的记录总行数
对于重复值,取重复值的最后一行记录的位置

1.3 SQL例子

select 
uid,exam_id,score,
rank() over(partition by exam_id order  by score desc) ranks,
count(score) over(partition by exam_id order  by score desc) row_num,
percent_rank() over(partition by exam_id order  by score desc) percent_ranks,
cume_dist() OVER (partition by exam_id order  by score desc) as cume_dists
from exam_record

输出结果:
在这里插入图片描述

2,Pandas 实现

import pandas as pd
test_df = pd.read_csv('../data/test.csv',dtype={'uid':object,'exam_id':object})
test_df.sort_values(by=['exam_id','score'],ascending=[True,False],inplace=True)

test_df['rank'] = test_df.groupby(['exam_id'])['score'].rank(ascending=False,method='min')  ##分组排序,method='min' 等同于 rank()
test_df['row_num'] = test_df.groupby(['exam_id'])['score'].transform('count')  ##分组,使用transform,返回与输入相同尺寸的对象
test_df['percent_rank'] = test_df.apply(lambda x:(x['rank']-1)/(x['row_num']-1),axis=1)  ## 计算 percent_rank
test_df['cume_dist'] = test_df.apply(lambda x:x['rank']/x['row_num'],axis=1)  ## 计算 cume_dist

test_df

输出结果:
在这里插入图片描述

3,补充Pandas实现排序

import pandas as pd
test_df2 = pd.read_csv('../data/test.csv',dtype={'uid':object,'exam_id':object})
test_df2.sort_values(by=['exam_id','score'],ascending=[True,False],inplace=True)
test_df2['row_number'] = test_df2.groupby(['exam_id'])['score'].rank(ascending=False,method='first') ## method='first' 等同于 row_number()
test_df2['rank'] = test_df2.groupby(['exam_id'])['score'].rank(ascending=False,method='min')    ## method='min' 等同于 rank()
test_df2['dense_rank'] = test_df2.groupby(['exam_id'])['score'].rank(ascending=False,method='dense') ## method='dense' 等同于 dense_rank()
test_df2

输出结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kali-linux系统指纹识别

现在一些便携式计算机操作系统使用指纹识别来验证密码进行登录。指纹识别是识别系统的一个典型模式,包括指纹图像获取、处理、特征提取和对等模块。如果要做渗透测试,需要了解要渗透测试的操作系统的类型才可以。本节将介绍使用Nmap工具测试正在运行的主…

图像处理:高斯滤波算法

目录 前言 概念介绍 基本原理 卷积核的大小 卷积核的形状和权重比 卷积核的归一化 结论 Opencv实现高斯滤波 Python手写实现高斯滤波 参考文章 前言 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边…

springboot+jsp乡村中小学校园网站建设

随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,乡村小学校园网当然也不能排除在外,从校园概况、学校风采、招生信息的统计和分析,在过程中会产生大量的…

三十二、自定义镜像

1 、Docker镜像的原理 Docker镜像本质是什么? Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G? Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有10多MB? 操作系统组成部分: 计算机组成原理 进程调度子…

华为许超:伙伴成功,才有华为企业业务成功

伙伴,可以说是今年ICT行业最为重要的词。各大厂商都在强调伙伴优先,发力伙伴体系构建。然而行业内更多是厂商单维度的信息释放,重视强调厂商面向伙伴的支持与赋能。这个过程中,似乎普遍缺少一个视角:那就是伙伴究竟需要…

STM32开发(十九)STM32F103 数据手册 —— 低功耗模式解析

文章目录 低功耗介绍stm32 供电框图低功耗模式睡眠模式停止模式待机模式低功耗模式汇总低功耗介绍 系统复位或上电复位后,微控制器进入运行模式。在运行模式下,CPU通过HCLK提供时钟,并执行程序代码。 系统提供多种低功耗模式,可以在CPU不需要运行时进入低功耗模式节省功耗…

开心档之Java 抽象类

Java 抽象类 目录 Java 抽象类 抽象类 Employee.java 文件代码: AbstractDemo.java 文件代码: 继承抽象类 Salary.java 文件代码: AbstractDemo.java 文件代码: 抽象方法 Salary.java 文件代码: 抽象类总结…

虚拟化技术介绍-VMware和Docker的区别

都说今天是一个云时代,其实云的本质就是由基础架构提供商提供基础架构,应用开发商不再关心基础架构。我们可以类比人类刚刚发明电的时候,工厂需要自己建电站,而现在只需要电线和插座就可以使用电。云时代让我们可以在分钟、甚至秒…

【企业信息化】第6集 免费开源ERP: Odoo 16 MRP + 维护+ PLM +质量全面生产制造管理

文章目录 一、MRP 物料需求计划1.一款软件,满足您的所有需要2.工作中心控制面板3.优化您的库存等级4.条形码,即开即用5.出色报告关键绩效指标6.与其他Odoo应用程序完全集成 二、PLM 产品生命周期管理1.管理工程变更2.集成文件管理3.智能版本管理4.与其他…

【软件测试】未来软件测试必备的八大技能!你缺少哪个?

软件测试工程师是个神奇的职业,他是开发人员与老板之间的传话筒(三夹板),也是开发人员与老板的好帮手; 他不仅需要有销售的沟通能力,也需要具备编辑人员的文档撰写技巧。如此一个面面俱到的岗位&#xff0…

ChatGPT 实现云原生转型

云原生转型 在相对专业的细分领域,chatGPT 能起到什么作用呢?能给出什么回答,怎么问才能得到好的回答呢?本节内容,将尝试从一个业界其实也还没有定论的话题,开始问答。这就是:云原生转型。 &q…

网站域名历史记录批量查询-老域名建站历史快照数据查询

域名建站历史查询软件 域名建站历史查询软件是一种用于查询一个域名被使用的网站的历史记录的工具。它可以提供许多有用的信息,包括该网站的创建和修改日期、使用的网站建设平台、使用的CMS系统、网站的历史页面内容和页面结构等。 域名建站历史查询软件的作用是帮…

Docker基础篇(下)

1、容器命令 新建启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]常用的参数: ● --name:为容器指定一个名称 ● -d:后台运行容器并返回容器ID,也即启动守护式容器 ● -i:以交互模式(interacti…

什么是鉴权?这些postman鉴权方式你又知道多少?

一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁,您想要进入室内,必须通过…

找回 Windows 映射网络驱动器密码

随着越来越多的人使用 NAS(网络云硬盘),各种网络映射驱动器的问题也随之出现。最近有个客户要换电脑。换电脑之后就无法访问 NAS 了,因为他记不得他 NAS 里边设置的用户名密码。还好他之前的电脑有保存这些密码记录。 第一次链接 …

[入门必看]数据结构5.3:二叉树的遍历和线索二叉树

[入门必看]数据结构5.3:二叉树的遍历和线索二叉树 第五章 树与二叉树5.3 二叉树的遍历和线索二叉树知识总览5.3.1_1 二叉树的先中后序遍历5.3.1_2 二叉树的层次遍历5.3.1_3 由遍历序列构造二叉树5.3.2_1 线索二叉树的概念5.3.2_2 二叉树的线索化5.3.2_3 在线索二叉树…

Linux:在VMware中,如果虚拟机之前可以上网,之后突然不能上网,怎么办?

Linux系统版本:centos 7.5 x64位 VMware版本: VMware Workstation Pro 16 文章目录 前言一、什么原因会导致这种问题并如何解决它?原因①:虚拟机没有启动网络服务原因②:外部主机上VMware的【VMware NAT Service】服务…

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes” 问题描述 数据库RDS MySQL版在创建表索引时,出现如下错误信息。 Error 1071: Specified key was too long; max key length is 767 bytes.ERROR 1709 (HY000): Index column siz…

【Java】Java中线程安全有哪些实现思路?

文章目录 1、使用 synchronized 关键字2、使用 ReentrantLock 类3、使用 ConcurrentHashMap 类4、使用 Atomic 类5、使用 ThreadLocal 类总结 在 Java 多线程编程中,线程安全是一个非常重要的概念。 线程安全通常指程序在多线程并发执行时,仍然能够保持正…

ANR实战案例 - FCM拉活启动优化

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、Trace日志分析二、业务分析1.Firebase源码分析2.Firebase官方查看官方文档Dem…