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 = dic
    def 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':
            pass
        elif keep=='last':
            for t in tmp[n:]:
                if num==t[idx]:
                    res[-1]=t
                else:
                    break
        elif keep=='all':
            for t in tmp[n:]:
                if num==t[idx]:
                    res.append(t)
                else:
                    break
        else:
            raise ValueError('keep must be either "first", "last" or "all"')
        return res

dic = {
'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)
 

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

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

相关文章

动态库是怎么被加载的?

目录 1.动态库是如何被加载的&#xff1f; 2.那么虚拟地址和物理地址是如何映射的呢&#xff1f; 3.那么动态库的地址怎么来&#xff1f; 1.动态库是如何被加载的&#xff1f; 下面这个就是正常的进程是如何从磁盘中读取信息编译的&#xff1a; 而动态库就存储在共享区段&am…

Android简单支持项目符号的EditText

一、背景及样式效果 因项目需要&#xff0c;需要文本编辑时&#xff0c;支持项目符号&#xff08;无序列表&#xff09;尝试了BulletSpan&#xff0c;但不是很理想&#xff0c;并且考虑到影响老版本回显等因素&#xff0c;最终决定自定义一个BulletEditText。 先看效果&…

新春营销不间断,AI 整活更省心

新年、春节历来都是营销的大热节点&#xff0c;各种好物集、年货节、送礼清单比比皆是。这些新鲜玩法的背后是大量的品牌内容「弹药库」。 然而&#xff0c;品牌想在竞争激烈的新春季刷满存在感&#xff0c;并非易事。一方面&#xff0c;节日期间&#xff0c;消费者对于内容的审…

交叉验证之KFold和StratifiedKFold的使用(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

云计算、Docker、K8S问题

1 云计算 云计算作为一种新兴技术&#xff0c;已经在现代社会中得到了广泛应用。它以其高效、灵活和可扩展特性&#xff0c;成为了许多企业和组织在数据处理和存储方面的首选方案。 1.1 什么是云计算&#xff1f;它有哪些特点&#xff1f; 云计算是一种通过网络提供计算资源…

项目02《游戏-06-开发》Unity3D

基于 项目02《游戏-05-开发》Unity3D &#xff0c; 接下来做 背包系统的 存储框架 &#xff0c; 首先了解静态数据 与 动态数据&#xff0c;静态代表不变的数据&#xff0c;比如下图武器Icon&#xff0c; 其中&#xff0c;武器的名称&#xff0c;描述&#xff…

全网第一篇把Nacos配置中心客户端讲明白的

入口 我们依旧拿ConfigExample作为入口 public class ConfigExample {public static void main(String[] args) throws NacosException, InterruptedException {String serverAddr "localhost";String dataId "test";String group "DEFAULT_GROU…

搭建frp

1.frp 是什么&#xff1f; frp 是一款高性能的反向代理应用&#xff0c;专注于内网穿透。它支持多种协议&#xff0c;包括 TCP、UDP、HTTP、HTTPS 等&#xff0c;并且具备 P2P 通信功能。使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过拥有公网…

解决nvrtc: error: invalid value for --gpu-architecture (-arch)

问题描述 在使用pytorch3d的时候&#xff0c;可以正常的import&#xff0c;但是在执行错误的使用就会报&#xff0c;nvrtc: error: invalid value for --gpu-architecture (-arch)&#xff0c;的错误&#xff0c;图片如下&#xff1a; 我的环境是&#xff1a; 显卡&#xff1…

精细管理药厂设备,制药机械设备管理平台系统助力生产提效

制药行业的复杂性要求对药品的品质和安全性进行严格控制&#xff0c;而这离不开高效管理各类机械设备。然而&#xff0c;随着制药企业规模的不断扩大和技术的迅猛进步&#xff0c;如何有效管理这些设备成为一个亟待解决的问题。在这一挑战面前&#xff0c;PreMaint制药机械设备…

Antd+React+react-resizable实现表格拖拽功能

1、先看效果 2、环境准备 "dependencies": {"antd": "^5.4.0","react-resizable": "^3.0.4",},"devDependencies": {"types/react": "^18.0.33","types/react-resizable": "^…

前端面试题——Vue的双向绑定

前言 双向绑定机制是Vue中最重要的机制之一&#xff0c;甚至可以说是Vue框架的根基&#xff0c;它将数据与视图模板相分离&#xff0c;使得数据处理和页面渲染更为高效&#xff0c;同时它也是前端面试题中的常客&#xff0c;接下来让我们来了解什么是双向绑定以及其实现原理。…

Python的包安装工具——pip命令大全

对于大多数使用Python的人来说&#xff0c;一定知道pip这个包安装工具&#xff0c;但是对pip可能还不是很了解&#xff0c;今天作者给大家介绍一下pip的命令&#xff0c;以方便灵活使用pip。 一、pip工具使用方法 pip的语法如下&#xff1a; pip [options] 式中&#xff1a…

InverseMatrix3D

InverseMatrixVT3D: An Efficient Projection Matrix-Based Approach for 3D Occupancy Prediction https://github.com/DanielMing123/InverseMatrixVT3D InverseMatrix3D过程总结如下&#xff1a; 1. 用2D backbone提取N个视角的多尺度图像特征&#xff0c;表示如下&#xf…

机器学习聚类算法

聚类算法是一种无监督学习方法&#xff0c;用于将数据集中的样本划分为多个簇&#xff0c;使得同一簇内的样本相似度较高&#xff0c;而不同簇之间的样本相似度较低。在数据分析中&#xff0c;聚类算法可以帮助我们发现数据的内在结构和规律&#xff0c;从而为进一步的数据分析…

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

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

Python 潮流周刊#38:Django + Next.js 构建全栈项目

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…

protoc结合go完成protocol buffers协议的序列化与反序列化

下载protoc编译器 下载 https://github.com/protocolbuffers/protobuf/releases ps: 根据平台选择需要的编译器&#xff0c;这里选择windows 解压 加入环境变量 安装go专用protoc生成器 https://blog.csdn.net/qq_36940806/article/details/135017748?spm1001.2014.3001.…

canvas图片上设置镂空文字效果

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

VR全景技术可以应用在哪些行业,VR全景技术有哪些优势

引言&#xff1a; VR全景技术&#xff08;Virtual Reality Panorama Technology&#xff09;是一种以虚拟现实技术为基础&#xff0c;通过360度全景影像、立体声音、交互元素等手段&#xff0c;创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用&#xff0c;还可…