python常用pandas函数nlargest / nsmallest及其手动实现

目录

pandas库

Series和DataFrame

nlargest和nsmallest

用法示例

代替方法

手动实现

模拟代码


pandas库

是Python中一个非常强大的数据处理库,提供了高效的数据分析方法和数据结构。它特别适用于处理具有关系型数据或带标签数据的情况,同时在时间序列分析方面也有着出色的表现。

pandas库广泛应用于数据挖掘和分析、金融和经济分析、科学和工程计算等领域。使用pandas库可以轻松地对数据进行筛选、排序、过滤、清理和变换等操作,并可以进行统计和汇总等分析,从而提高数据处理的效率和精度。pandas库还提供了许多常用的函数和方法,例如数据筛选和排序、数据合并和连接等。

Series和DataFrame

pandas库中最常用的数据类型是Series和DataFrame。Series是一维数组,拥有数据与索引;而DataFrame则是一个类似于表格的二维数据结构,其中储存了多个Series。例如:

>>> import pandas as pd
>>> df = pd.DataFrame({
'Title': ['流浪地球 2', '奥本海默', '俄罗斯方块', '银河护卫队 3', '我爱你!', '电锯惊魂 10', '灌篮高手', '梦的背后', '漫长的季节', '1923 第一季', '黑暗荣耀 第二季', '重启人生', '画江湖之不良人 6', '地球脉动 第三季'],
'Award': ['评分最高华语电影', '评分最高外语电影', '年度冷门佳片', '评分最高喜剧片', '评分最高爱情片', '评分最高恐怖片', '评分最高动画片', '评分最高纪录片', '评分最高华语剧集', '评分最高英美新剧', '评分最高韩国剧集', '评分最高日本剧集', '评分最高动画剧集', '评分最高纪录剧集'],
'Score': [9.5, 8.8, 8.0, 8.4, 7.9, 7.4, 8.9, 9.0, 9.4, 9.3, 9.0, 9.3, 9.4, 9.8]}
)
>>> df
        Title     Award  Score
0      流浪地球 2  评分最高华语电影    9.5
1        奥本海默  评分最高外语电影    8.8
2       俄罗斯方块    年度冷门佳片    8.0
3     银河护卫队 3   评分最高喜剧片    8.4
4        我爱你!   评分最高爱情片    7.9
5     电锯惊魂 10   评分最高恐怖片    7.4
6        灌篮高手   评分最高动画片    8.9
7        梦的背后   评分最高纪录片    9.0
8       漫长的季节  评分最高华语剧集    9.4
9    1923 第一季  评分最高英美新剧    9.3
10   黑暗荣耀 第二季  评分最高韩国剧集    9.0
11       重启人生  评分最高日本剧集    9.3
12  画江湖之不良人 6  评分最高动画剧集    9.4


nlargest和nsmallest

本篇就简单说说pandas数据筛选和排序中的nlargest / nsmallest两个函数的用法:

DataFrame.nlargest(n, columns, keep='first')
Series.nlargest(n, keep='first')

DataFrame.nsmallest(n, columns, keep='first')
Series.nsmallest(n, keep='first')
n是一个整数,表示要返回的行数或值数。

columns是一个标签或标签列表,表示要按照哪些列进行排序。只适用于DataFrame,不适用于Series。

keep是一个字符串,表示当有相同值的时候,如何处理。可以取以下三个值之一:

    'first':保留第一个出现的行或值。

    'last':保留最后一个出现的行或值。

     'all':保留所有出现的行或值。

nlargest函数会返回一个新的DataFrame或Series,包含原数据中最大的n个值,按照降序排列。如果指定了多个列,那么会按照列的顺序依次进行排序。如果原数据中的值不是数值类型,那么会抛出TypeError异常。nsmallest函数则按照升序排列,另外如使用参数 keep='all',会导致返回的结果数会超过第一个参数n的值。

用法示例

>>> df.nlargest(3, 'Score', keep='first')
       Title     Award  Score
13  地球脉动 第三季  评分最高纪录剧集    9.8
0     流浪地球 2  评分最高华语电影    9.5
8      漫长的季节  评分最高华语剧集    9.4
>>> df.nlargest(3, 'Score', keep='last')
        Title     Award  Score
13   地球脉动 第三季  评分最高纪录剧集    9.8
0      流浪地球 2  评分最高华语电影    9.5
12  画江湖之不良人 6  评分最高动画剧集    9.4
>>> df.nlargest(3, 'Score')
       Title     Award  Score
13  地球脉动 第三季  评分最高纪录剧集    9.8
0     流浪地球 2  评分最高华语电影    9.5
8      漫长的季节  评分最高华语剧集    9.4
>>> df.nlargest(3, 'Score', keep='all')
        Title     Award  Score
13   地球脉动 第三季  评分最高纪录剧集    9.8
0      流浪地球 2  评分最高华语电影    9.5
8       漫长的季节  评分最高华语剧集    9.4
12  画江湖之不良人 6  评分最高动画剧集    9.4
>>> df.nsmallest(3, 'Score')
     Title    Award  Score
5  电锯惊魂 10  评分最高恐怖片    7.4
4     我爱你!  评分最高爱情片    7.9
2    俄罗斯方块   年度冷门佳片    8.0

代替方法

df.sort_values()加切片也能实现nlargest和nsmallest的基本功能:

>>> df.sort_values('Score')[-3:][::-1]
        Title     Award  Score
13   地球脉动 第三季  评分最高纪录剧集    9.8
0      流浪地球 2  评分最高华语电影    9.5
12  画江湖之不良人 6  评分最高动画剧集    9.4
>>> df.sort_values('Score')[:3]
     Title    Award  Score
5  电锯惊魂 10  评分最高恐怖片    7.4
4     我爱你!  评分最高爱情片    7.9
2    俄罗斯方块   年度冷门佳片    8.0

手动实现

假如我们不使用pandas,只用python基础数据类型dict()来实现这些功能:

>>> dic = {
'Title': ['流浪地球 2', '奥本海默', '俄罗斯方块', '银河护卫队 3', '我爱你!', '电锯惊魂 10', '灌篮高手', '梦的背后', '漫长的季节', '1923 第一季', '黑暗荣耀 第二季', '重启人生', '画江湖之不良人 6', '地球脉动 第三季'],
'Award': ['评分最高华语电影', '评分最高外语电影', '年度冷门佳片', '评分最高喜剧片', '评分最高爱情片', '评分最高恐怖片', '评分最高动画片', '评分最高纪录片', '评分最高华语剧集', '评分最高英美新剧', '评分最高韩国剧集', '评分最高日本剧集', '评分最高动画剧集', '评分最高纪录剧集'],
'Score': [9.5, 8.8, 8.0, 8.4, 7.9, 7.4, 8.9, 9.0, 9.4, 9.3, 9.0, 9.3, 9.4, 9.8]}
>>> dic['Title']
['流浪地球 2', '奥本海默', '俄罗斯方块', '银河护卫队 3', '我爱你!', '电锯惊魂 10', '灌篮高手', '梦的背后', '漫长的季节', '1923 第一季', '黑暗荣耀 第二季', '重启人生', '画江湖之不良人 6', '地球脉动 第三季']
>>> dic['Score']
[9.5, 8.8, 8.0, 8.4, 7.9, 7.4, 8.9, 9.0, 9.4, 9.3, 9.0, 9.3, 9.4, 9.8]

使用内置函数sorted, zip一行代码就能实现:

>>> sorted(zip(dic['Title'],dic['Award'],dic['Score']),key=lambda x:x[-1])[-3:][::-1]
[('地球脉动 第三季', '评分最高纪录剧集', 9.8), ('流浪地球 2', '评分最高华语电影', 9.5), ('画江湖之不良人 6', '评分最高动画剧集', 9.4)]
>>> sorted(zip(dic['Title'],dic['Award'],dic['Score']),key=lambda x:x[-1])[:3]
[('电锯惊魂 10', '评分最高恐怖片', 7.4), ('我爱你!', '评分最高爱情片', 7.9), ('俄罗斯方块', '年度冷门佳片', 8.0)]

如果也想实现参数keep=last和all,那就稍微复杂些,你可以试试如何实现?

模拟代码

class DataFrame:def __init__(self, dic):self.dic = dicdef nlargest(self, n, Column, keep='first'):if n<=0:return []if Column not in self.dic:raise KeyError(f'{Column}')if not all([isinstance(i,int) or isinstance(i,float) for i in self.dic[Column]]):raise TypeError(f"Column '{Column}' has dtype object, cannot use method 'nlargest' with this dtype")lst = [self.dic[i] for i in self.dic.keys()]idx = list(self.dic.keys()).index(Column)tmp = sorted(zip(*lst) ,key=lambda x:x[idx],reverse=True)res = tmp[:n]num = tmp[n-1][idx]if keep=='first':passelif keep=='last':for t in tmp[n:]:if num==t[idx]:res[-1]=telse:breakelif keep=='all':for t in tmp[n:]:if num==t[idx]:res.append(t)else:breakelse:raise ValueError('keep must be either "first", "last" or "all"')return resdic = {
'Title': ['流浪地球 2', '奥本海默', '俄罗斯方块', '银河护卫队 3', '我爱你!', '电锯惊魂 10', '灌篮高手', '梦的背后', '漫长的季节', '1923 第一季', '黑暗荣耀 第二季', '重启人生', '画江湖之不良人 6', '地球脉动 第三季'],
'Award': ['评分最高华语电影', '评分最高外语电影', '年度冷门佳片', '评分最高喜剧片', '评分最高爱情片', '评分最高恐怖片', '评分最高动画片', '评分最高纪录片', '评分最高华语剧集', '评分最高英美新剧', '评分最高韩国剧集', '评分最高日本剧集', '评分最高动画剧集', '评分最高纪录剧集'],
'Score': [9.5, 8.8, 8.0, 8.4, 7.9, 7.4, 9.0, 9.0, 9.4, 9.3, 9.0, 9.3, 9.4, 9.8],
}df = DataFrame(dic)
kp = 'first', 'last', 'all'
print('3largest:')
for k in kp:print(k+':')for n in df.nlargest(3, 'Score', keep=k):print(n)
print('7largest:')
for k in kp:print(k+':')for n in df.nlargest(7, 'Score', keep=k):print(n)

运行结果:
3largest:
first:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('漫长的季节', '评分最高华语剧集', 9.4)
last:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('画江湖之不良人 6', '评分最高动画剧集', 9.4)
all:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('漫长的季节', '评分最高华语剧集', 9.4)
('画江湖之不良人 6', '评分最高动画剧集', 9.4)
7largest:
first:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('漫长的季节', '评分最高华语剧集', 9.4)
('画江湖之不良人 6', '评分最高动画剧集', 9.4)
('1923 第一季', '评分最高英美新剧', 9.3)
('重启人生', '评分最高日本剧集', 9.3)
('灌篮高手', '评分最高动画片', 9.0)
last:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('漫长的季节', '评分最高华语剧集', 9.4)
('画江湖之不良人 6', '评分最高动画剧集', 9.4)
('1923 第一季', '评分最高英美新剧', 9.3)
('重启人生', '评分最高日本剧集', 9.3)
('黑暗荣耀 第二季', '评分最高韩国剧集', 9.0)
all:
('地球脉动 第三季', '评分最高纪录剧集', 9.8)
('流浪地球 2', '评分最高华语电影', 9.5)
('漫长的季节', '评分最高华语剧集', 9.4)
('画江湖之不良人 6', '评分最高动画剧集', 9.4)
('1923 第一季', '评分最高英美新剧', 9.3)
('重启人生', '评分最高日本剧集', 9.3)
('灌篮高手', '评分最高动画片', 9.0)
('梦的背后', '评分最高纪录片', 9.0)
('黑暗荣耀 第二季', '评分最高韩国剧集', 9.0)
 

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

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

相关文章

十分钟学会用springboot制作微信小程序富文本编辑器

1.1 富文本模型设计 在构建富文本编辑器系统时&#xff0c;首先需要设计一个合适的富文本模型。 CREATE TABLE IF NOT EXISTS rich_texts (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),content TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );这个表包括…

【算法与数据结构】647、516、LeetCode回文子串+最长回文子序列

文章目录 一、647、回文子串二、516、最长回文子序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、647、回文子串 思路分析&#xff1a;判断一个字符串是否为回文串那么必须确定回文串的所在区间&#xff0c;而一维…

(2)(2.13) Rockblock Satellite Modem

文章目录 前言 1 支持的MAVLink命令信息 2 设置 3 使用方法 4 数据成本 5 参数 前言 &#xff01;Note 该功能仅适用于 ArduPilot 4.4 或更高版本&#xff0c;并且要求飞行控制器支持 LUA 脚本(LUA Scripts)。 RockBLOCK 卫星调制解调器可实现与 ArduPilot 飞行器的全球…

如何将pdf转换成ppt?掌握这个方法就简单多了

有时候&#xff0c;PDF文件的布局和设计可能需要进行微调或重新排版&#xff0c;以适应PPT的特定格式和风格。那么怎么pdf怎么转ppt呢&#xff1f;为了更方便地对布局、字体、图像和其他元素进行编辑和调整&#xff0c;以符合PPT的需求&#xff0c;我们可以直接通过pdf在线转pp…

SQL Server之DML触发器

一、如何创建一个触发器呢 触发器的定义语言如下&#xff1a; CREATE [ OR ALTER ] TRIGGER trigger_nameon {table_name | view_name}{for | After | Instead of }[ insert, update,delete ]assql_statement从这个定义语言我们可以知道如下信息&#xff1a; trigger_name&…

Linux项目自动化构建工具之make/Makefile演示gcc编译

文章目录 一、背景二、如何使用&#xff1f;三、原理四、关于make的问题五、再次理解/编写makefile依赖关系依赖方法 六、原理讲解项目清理makefile是支持变量的取消执行make后显示命令依赖方法可以多行 一、背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备…

nop-entropy可逆计算入门(1)

第1步&#xff1a;从大佬的gitee&#xff1a;https://gitee.com/canonical-entropy/nop-entropy下载源码&#xff0c;进行本地编译&#xff0c;具体编译看项目下的readme,想偷懒的可以下载我编译后的jar&#xff0c;放到自己的maven仓库 https://pan.baidu.com/s/1p9MOh40MJ2m…

mac如何实现升级node版本、切换node版本

一、 查看node所有版本&#xff08;前提:安装了nodejs&#xff09; npm view node versions二、安装指定node版本 sudo n 版本号三、检查目前安装了哪些版本的node&#xff0c;会出现已安装的node版本 n四、切换已安装的node版本 sudo n 版本号其他命令 1、sudo npm cache…

Centos 内存和硬盘占用情况以及top作用

目录 只查看内存使用情况&#xff1a; 内存使用排序取前5个&#xff1a; 硬盘占用情况 定位占用空间最大目录 top查看cpu及内存使用信息 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

Matlab数字图像处理——图像复原与滤波算法应用方法

图像处理领域一直以来都是计算机科学和工程学的一个重要方向&#xff0c;图像复原则是其中一个重要的研究方向之一。图像复原旨在通过运用各种滤波算法&#xff0c;对图像进行去噪、恢复和改善&#xff0c;以提高图像的质量和可视化效果。在本文中&#xff0c;我们将介绍如下内…

python Flask 写一个简易的 web 端程序(附demo)

python Flask 写一个简易的 web 端程序 &#xff08;附demo&#xff09; 介绍简单介绍装饰器 app.route("/") 进阶增加接口设置端口 静态网页核心代码完整代码 介绍 Flask 是一个用于构建 Web 应用程序的轻量级 Python Web 框架。它设计简单、易于学习和使用&#x…

ReactNative实现宽度变化实现的动画效果

效果如上图所示&#xff0c;通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView props > {const fadeAnim useRef(new Animated.Value(0)).current;React…

list基本使用

list基本使用 构造迭代器容量访问修改 list容器底层是带头双向链表结构&#xff0c;可以在常数范围内在任意位置进行输入和删除&#xff0c;但不支持任意位置的随机访问&#xff08;如不支持[ ]下标访问&#xff09;&#xff0c;下面介绍list容器的基本使用接口。 template <…

k8s学习-Kubernetes的网络

Kubernetes作为编排引擎管理着分布在不同节点上的容器和Pod。Pod、Service、外部组件之间需要⼀种可靠的方找到彼此并进行通信&#xff0c;Kubernetes网络则负责提供这个保障。 1.1 Kubernetes网络模型 Container-to-Container的网络 当Pod被调度到某个节点&#xff0c;Pod中…

ARM PAC指针认证的侧信道攻击——PACMAN安全漏洞

目录 Q1. PACMAN论文的内容是什么&#xff1f; Q2. Arm处理器是否存在漏洞&#xff1f; Q3. 受Arm合作伙伴架构许可设计的处理器实现是否受到影响&#xff1f; Q4. Cortex-M85受到影响吗&#xff1f; Q5. Cortex-R82受到影响吗&#xff1f; Q6. 指针认证如何保护软件&…

Python 实现 五子棋小游戏【附源码】

引言 五子棋是一种古老而深受欢迎的策略游戏&#xff0c;它具有简单的规则和无穷的变化。作为一种传统的中国棋类游戏&#xff0c;五子棋已经在世界范围内流行起来&#xff0c;并成为智力挑战和休闲娱乐的优秀选择。 规则和玩法&#xff1a; 五子棋使用一个15x15的棋盘&#x…

MIMIC数据库, 使用Python研究万古霉素的剂量 (一)

一、万古霉素 是一种杀菌型 抗生素&#xff0c;抑制细菌细胞壁的合成 万古霉素对以下细菌有效&#xff1a; 大多数革兰阳性球菌和杆菌有抗菌活性&#xff0c;包括几乎所有耐青霉素和头孢菌素的 Staphylococcus aureus 和凝固酶阴性葡萄球菌株 许多菌株 肠球菌 &#xff08;…

【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“

使用idea运行项目&#xff0c;显示错误信息如下&#xff1a; 原因是&#xff1a;idea配置的maven加载不到autoconfigure。 解决方案一&#xff1a; 第6步绕过证书语句如下&#xff1a; -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue 打开终端&am…

2V2无人机红蓝对抗仿真

两架红方和蓝方无人机分别从不同位置起飞&#xff0c;蓝方无人机跟踪及击毁红方无人机 2020a可正常运行 2V2无人机红蓝对抗仿真资源-CSDN文库

【并发编程】原子累加器

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 JDK8之后有专门做累加的类&#xff0c;效率比自己做快数倍以上 累加器性能比较 参数是方法 // supplier 提供者 无中生有 ()->结果// func…