大更新,pandas终于有case_when方法了!

dataframe的case when 语法 dataframe的case when 语法 data['date_diff'] = np.select([data['date_diff'].between(1, 2), data['date_diff'].between(3, 6), data['date_diff'].between(7, 14), data['date_diff'] > 15], [1, 3, 7, 15]) 阅读详情

数分小伙伴们都知道,SQL中的case when语句非常好用,尤其在加工变量的时候,可以按照指定的条件的进行赋值,并且结合其他嵌套用法还可以实现非常强大的功能。

同样作为数据分析常用工具之一,pandas中却没有像case when这样的语句,一直以来收到很多朋友吐槽,这样一个常用的功能竟然没有?一般通过使用np.where,where,mask,map,apply,loc等其他方式来实现case when的效果。

好消息是,最近pandas2.2.0稳定版本发布了,其中一个新功能就是增加了case_when方法,可以说这个一直被大家诟病的方法终于补齐了!

一、环境

首先,pandas2.2.0的版本有个安装的前提条件,就是python的版本需要在3.9及以上才行,因此如果使用anaconda的朋友,可以通过conda install python=3.12.1命令先进行python版本升级,完成后再敲入python --version检验版本是否安装成功。

import pandas as pd  

首次执行pandas包导入后会有一个警告提示,提示你pandas 3.0版本需要Pyarrow但是你目前没有,忽略即可。

二、case_when用法

东哥了解了一下case_when用法,总结了以下几点要点。

对象:case_when属于series对象的方法,dataframe对象无法使用。

**功能:**如果判断条件为真(True)则替换数据,反之保持原值不变。有点类似于升级版的where/mask。

**参数:**只有一个参数caselist,是一个元组构成的列表,元组内包含判断条件和想要替换的值。具体形式如下:

caselist = [  
  (condition1,replacement1),  
  (condition2,replacement2),  
  ...]  

  • **condition(判断条件):**可以是一维布尔类型的数组或者是可调用的对象(比如函数)。如果是可调用对象,那么应用在series上计算然后返回一个布尔类型的数组或者series。另外,可调用对象不得更改输入series数据。

  • **replacement(替换值):**可以是一维数组类对象、标量或者可调用对象。如果是可调用对象,那么应用在series上计算然后返回标量或series。同样的,可调用对象不得更改输入series数据。

对于condition和replacement的要求可以看出,case_when的用法非常的灵活。

举例

下面创建一组数据说明,是不同学生的三科考试成绩。

案例1

我们想对所有的学生成绩的总分划分不同的等级。

import pandas as pd  
  
df = pd.DataFrame(  
    dict(enligsh= [70, 90, 80, 85, 65, 92],   
         math   = [90, 84, 69, 73, 98, 83],  
         physic = [84, 58, 74, 93, 87, 86]  
        ))  
df  

首先,对三科考试求和生成总分数新列。

df['score_all'] = df.sum(axis=1)  

对加工的总成绩列使用case_when方法,生成1-5的排序等级。

df['rank_level'] = df.score_all.case_when(  
    caselist=[  
        ((df.score_all > 220)&(df.score_all <=230), '5'),  
        ((df.score_all > 230)&(df.score_all <=240), '4'),  
        ((df.score_all > 240)&(df.score_all <=250), '3'),  
        ((df.score_all > 250)&(df.score_all <=260), '2'),  
        ((df.score_all > 260)&(df.score_all <=270), '1'),  
    ]  
)  

案例2

再比如,我们想针对不同英语成绩的同学,在其总成绩上阶梯式的增加分数。

df['score_all_new'] = df.score_all.case_when(  
    caselist=[  
        ((df.english <= 70), lambda x:x+5),  
        ((df.english > 70)&(df.english <= 80), lambda x:x+3),  
        ((df.english > 80)&(df.english <= 90), lambda x:x+2),  
        ((df.english > 90), lambda x:x+1),  
    ]  
)  

注意,以上代码中有两点不同的地方:

  • 判断条件:判断条件的布尔值数组不是基于输入series产生的,而是由series所在的dataframe中其他同维度的series加工获取。这里输入series是score_all,判断条件用的是english。

  • 替换值:替换值使用了lambda隐函数对输入series计算。

这就是case_when非常灵活的原因,判断条件和替换值既可以是固定的值,也可以是自定义的函数,根据自己的需求随意设置。

案例3

case_when只实现区域内的变量加工,其输出结果也可以与其他函数方法结合,产生更多强大的功能。

比如,可以将以上全部变量加工过程通过链式的方式更优雅的实现,结合assign的使用一行代码可完成全部。

# 链式  
(  
    df.assign(score_all = lambda x: x.sum(axis=1))  
      .assign(rank_level = lambda x: x.score_all.case_when(  
          caselist=[  
              ((x.score_all > 220)&(x.score_all <=230), '5'),  
              ((x.score_all > 230)&(x.score_all <=240), '4'),  
              ((x.score_all > 240)&(x.score_all <=250), '3'),  
              ((x.score_all > 250)&(x.score_all <=260), '2'),  
              ((x.score_all > 260)&(x.score_all <=270), '1')]))  
      .assign(score_all_new = lambda x: x.score_all.case_when(  
          caselist=[  
              ((df.english <= 70), lambda x:x+5),  
              ((df.english > 70)&(df.english <= 80), lambda x:x+3),  
              ((df.english > 80)&(df.english <= 90), lambda x:x+2),  
              ((df.english > 90), lambda x:x+1)]))  
)  

以上就是“大更新,pandas终于有case_when方法了!”的全部内容,希望对你有所帮助。
​
​关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

pandas与sql 对比,持续更新... 欢迎来到诸葛老刘的博客 由于工作关系 , 经常会用到sql和python的pandas模块,两者有很多相似之处,我将整理出系列的对比文章,并保持更新. 若有不尽之处,敬请指出. 基础说明 本文代码环境基于windows 10 和 anaconda3创建的.python3.6虚拟环境 - 下表的名字,在sql中数据叫table, 在pandas中叫df, 在一般的df中id这个字符是不... 阅读详情

相关推荐

Oracle DECODE函数:高性能值映射与CASE WHEN替代实践

DECODE函数是Oracle数据库中专为等值映射设计的原生条件表达式,其核心原理是单次字段取值+顺序哈希匹配,区别于CASE WHEN的逐条布尔求值机制。这种轻量级参数化结构带来显著技术价值:在千万级订单表的字段编码转换、状态归类、分桶统计等场景下,可降低CPU时间10%~15%、减少逻辑读数千次/秒。它适用于Oracle生态内对性能敏感的ETL清洗、实时报表和老系统维护,尤其擅长单字段=常量的静态映射任务。本文深入解析DECODE函数、Oracle条件表达式在真实生产环境中的性能边界、隐式类型陷阱与NU

weixin_33841503的博客 360

Python Pandas 中的 case_when() 方法详解

在本文中,深入探讨了 Pandas 中的方法的用法,包括基本用法和高级用法。这个方法对于数据分析和数据转换任务非常有用,可以根据条件创建新的列,处理多条件组合和缺失值,并生成新的数据集。希望通过本文的示例代码和解释,能更好地理解和运用方法。这将有助于更灵活地处理各种数据分析和数据处理任务。如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

涛哥聊Python 2056

PostgreSQL CASE语句实战:数据分类、打标与业务规则落地

CASE语句是SQL中实现条件逻辑的核心机制,其本质是在单次查询中完成行级数据转换与业务规则映射。它不同于WHERE过滤,而是通过WHEN/THEN/ELSE构建可审计的决策路径,支撑报表分级、BI标签生成、ETL数据打标等关键场景。在真实工程中,CASE常因NULL处理缺失、类型不一致、边界覆盖不全导致口径偏差与下游模型污染。结合PostgreSQL的搜索CASE与简单CASE语法特性,配合TRIM、UPPER、COALESCE等清洗函数及强制ELSE兜底策略,可显著提升数据确定性与可维护性。本文聚焦CA

weixin_34267123的博客 702

数据分桶:pandas实现case when的操作

数据分桶:pandas实现case when的操作(自定义函数方法)

Viv_Bean的博客 2256

多维聚合实战:从SQL到Pandas的动态聚合心法

多维聚合是现代数据分析的核心能力,本质是基于维度建模对数据进行可复用、可钻取、可交叉的分组聚合操作。它超越传统GROUP BY的静态汇总,融合OLAP的Roll-up/Drill-down思维与轻量级工具链的工程实践。技术价值在于统一数据口径、支撑自助分析、实现秒级响应,广泛应用于BI看板构建、用户留存分析、营销归因建模等场景。本文聚焦多维聚合与数据操作两大核心,详解如何通过维度建模、动态聚合流水线和伪Cube设计,在不依赖重型OLAP引擎的前提下,达成高效、准确、可维护的多维分析目标。

weixin_38167262的博客 410

多维聚合实战:从SQL到Pandas的立方体计算体系

多维聚合是OLAP分析的核心能力,本质是在多维数据空间中构建可跨粒度运算的‘数据立方体’。其原理基于维度层级建模与严格计算顺序——先完成基础聚合生成最细粒度切片,再通过维度折叠、窗口函数实现跨维比率(如城市在省份内的销售占比)、同比环比等业务指标。技术价值在于支撑BI看板、自动化报表及实时下钻分析,广泛应用于电商GMV归因、金融区域风控、SaaS客户健康度评估等场景。本文聚焦多维聚合、数据重塑两大热词,提供SQL与Pandas协同落地的四步标准化框架。

a5199519的博客 408

Python和MySQL对比(3):用Pandas 实现MySQL的子查询、like_regexp、case when_if语法效果

环境:windows11 64位Python3.9MySQL8本文主要介绍 MySQL 中的子查询、like/regexp、case when/if 如何使用pandas实现,同时二者又有什么区别。Python 在实现子查询时,其实就是通过赋值给一个新的变量,然后使用新的变量再进行`merge()`,当然,也可以不用赋值新的变量,直接作为左表或右表的参数值进行传递。Python 在实现`like/regexp`时,则是通过`.str.contains()`,使用正则进行匹配,需要注意的是空值的填

明而决之 2210

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 392

pandas中新增的case_when()方法

语句功能,今天的文章中,我们就来get其具体使用方法~更灵活的方式,是将条件写作可执行函数,譬如。的前提下,终端执行下列命令安装最新版本的。对象的方法,其参数非常简单只有一个。,最基础的用法下,每个条件为与目标。的过程中,可以很灵活的基于上一步的。,用于定义条件映射规则,格式如。函数式条件,在针对数据框进行。

分享Python、数据分析、人工智能前沿知识 458

基于bootstrap+Java的图书管理系统(任务书)

10] 倪甜弟,周晓波,王相喜.基于JSP图书馆自习室预约系统的设计与实现[J].现代计算机, 2024, 30(9):117-120.DOI:10.3969/j.issn.1007-1423.2024.09.023.[2] 陈明雪,赵勇,周小丽,等.基于Node.js和Bootstrap的图书管理系统设计与研究[J].现代信息科技, 2021, 5(24):4.[9] 杨婷婷.基于VOSviewer的图书馆管理系统研究的可视化分析[J].现代信息科技, 2023, 7(3):123-126.

毕业作品网站 649

Carla学习笔记(一)服务器跑carla本地显示窗口

其中host后替换为你的服务器IP,-carla-rpc-port和-p后为端口号,需要一致。python3 manual_control.py也可以替换为其他python脚本。因为电脑配置不够,所以在服务器跑carla,本地运行PythonAPI里的样例。把carla仓库的PythonAPI拷贝到本地,或者直接去官方里下载一下。

做题记录 4980

Pandas实现SQL CASE WHEN的5种高效方法

条件判断是数据分析中的基础操作,SQL中的CASE WHEN语句是数据处理的重要工具。在Python生态中,pandas库通过向量化运算提供了多种条件判断的实现方式,相比SQL具有更高的灵活性和性能。本文重点介绍np.where、Series.map、pd.cut等5种pandas实现方法,涵盖从简单条件判断到复杂业务逻辑的各种场景。这些方法在数据清洗、特征工程、用户分层等实际业务中广泛应用,特别是在电商用户行为分析和金融风控建模等大数据场景下,合理选择条件判断方法能显著提升数据处理效率。通过性能对比可见,

weixin_42629815的博客 268

Infinite-Canvas:一站式AI绘画工作流平台部署与实战指南

在 AI 绘画和内容创作领域,你是否经常遇到这样的困扰:灵感来了,却要在多个工具间来回切换——找素材、写提示词、调整参数、批量生成,整个过程繁琐且低效。创作一个系列作品时,管理不同版本的图片和提示词更是让人头疼。如果你渴望一个能整合所有流程,实现从素材管理、提示词工程到批量出图一站式完成的工作台,那么今天介绍的 Infinite-Canvas 正是为你量身打造的解决方案。 Infinite-Canvas 是一个开源的本地网页应用,它将 AI 绘画的完整工作流集成在一个界面中。无论你是想快速生成单张图片,还是

weixin_28707535的博客 340

SQL Server行列转换实战:从CASE WHEN到动态PIVOT的完整指南

在数据库管理与数据分析领域,行列转换是一项核心的数据重塑技术,它通过改变数据表的呈现形态来满足多样化的业务需求。其基本原理是利用条件聚合,将行数据中的特定字段值映射为新的列结构,从而实现数据从‘长格式’到‘宽格式’的变换,反之亦然。这项技术的核心价值在于它能极大地提升报表开发效率和数据分析的灵活性,是进行数据透视、交叉报表制作和指标横向对比的基石。典型的应用场景包括销售报表中按产品展示月度趋势、用户属性表展开以及多维度指标分析等。本文将深入探讨SQL Server中实现行列转换的多种方法,特别是针对动态列数

weixin_34416754的博客 335

【CarMaker实战指南】从零构建环形测试场景与车辆连续仿真

本文详细介绍了如何使用CarMaker软件从零构建环形测试场景与实现车辆连续仿真。通过分步指导搭建闭环道路、连接交叉路口、规划车辆轨迹等核心操作,帮助用户掌握CarMaker的基础应用技巧,并提供了常见问题排查与进阶优化建议,适用于车辆耐久性测试和自动驾驶算法验证等场景。

weixin_29274969的博客 236

2026实测可用!4个专业AI Agent Skills垂直搜索平台对比

📊本文以表格形式整理4个实测可用的专业AI Agent Skills垂直搜索平台,涵盖资源规模、适配生态等关键维度🤖,适合开发者按需选择技能获取渠道,解决平台筛选与访问难题✨

XiaoqiangClub的博客 525

影刀RPA 数据库批量操作:批量插入与更新

本文介绍了使用影刀RPA进行数据库批量操作的高效方法,主要涵盖批量插入与更新场景。文章首先说明了批量操作的必要性(处理数千条数据时效率比单条操作快100倍),然后提供了5种实现方案:1) 基础批量插入;2) 分批插入防止内存溢出;3) CASE WHEN批量更新;4) INSERT ON CONFLICT实现有则更新无则插入;5) 从Excel批量导入数据库。每种方案都配有Python代码示例,并特别强调了与影刀RPA组件的配合使用方法。文章还提醒了批量操作可能遇到的数据格式错误、中间失败等常见问题及预防措

代码仓是开发的项目 189

FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示

与SPI相关知识并没有什么太多区别(别杠硬件或者架构上),相关知识点都在上面指出,大家有什么其他需要注意点,欢迎留言讨论。关于“四样错误”就不演示了,没什么太大区别,下一讲我们开始串口升级。PS:为了扩展ICAPE2原语的使用,在原来的基础上增加了几个常用FPGA ID,并在触发启动时候增加了可选电平触发或上升/下降沿触发(例化IP时选择),新版本号V1.1。

OpenFPGA的博客 1447

SQL行转列实战指南:PIVOT与CASE动态聚合全解析

行转列(Pivot)是将长表数据按维度折叠为宽表的关键技术,其本质是分组聚合与值映射的协同过程。底层依赖条件聚合(如SUM+CASE)实现跨数据库兼容,而原生PIVOT则提供更高性能但牺牲可移植性。该技术直接支撑BI可视化、下游系统对接及报表自动化等核心场景,尤其在电商、零售、金融等领域,面对动态品类、多时间粒度和NULL语义等现实约束时,需权衡静态编码与动态SQL方案。本文聚焦SQL Pivot与条件聚合两大主流路径,结合跨库适配、性能调优与生产避坑,提供可直接落地的工程化解决方案。

weixin_33736832的博客 520

uniapp - 解决真机调试报错 request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Tr

uni-app,真机调试报错,app端平台,安卓Android,安卓App发布线上报错,打包后接口请求失效了,api接口报错,真机运行安卓app时接口不通且报错,request:failabortstatusCode:-1java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.,真机调试,苹果ios真机报错,Uniapp打包到app后报错,uni-app真机调试报错,服务器

🏆 前端领域优质创作者 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复杂查询的sql和pandas实现(一):修改表格结构和数据

数据库一般分为三层的结构: 1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。 我们在表现层里面用户输入需要查询的内容;然后由业务逻辑层决定用哪种方式...

氤氲紫镜的空间 2127

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python Pandas可以像SQL那样,进行数据筛选统计

相对于学习Pandas各种数据筛选操作,SQL语法显得更加简洁清晰,若能够将SQL语法与Pandas中对应的函数的使用方法关联起来,对于我们应用Pandas进行数据筛选来讲无疑是一个福音。 本文通过Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等简单及复杂操作,使得我们对方法的理解更加深刻,更加得心应手。...

lazyfisher的博客 850

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mysql基础(2)-数据处理(mysql+pandas)

插入语句insert insert 数据表名(字段名...) values(字段值); 例 : insertintonew_studentvalues("张","2014101010","昆虫",13030303030,'1990-01-01'); insertintonew_studentvalues("李","2014101011","昆虫",130303...

weixin_34026484的博客 168

pandas Series 完整 API 指南:一维带标签数据结构的方法体系、访问器与源码级实现解析

> 本文基于 pandas 官方参考文档 [doc/source/reference/series.rst](https://link.gitcode.com/i/0858a9ead7ef5e73e2ed44a8da7bde3f) 展开,结合仓库内 [pandas/core/series.py](https://link.gitcode.com/i/2f362627ede5a40b11f451a6

gitblog_00885的博客 169
上一篇: 30个Python实用库,助力你的编程之旅
下一篇: pandas 时序统计的高级用法!
壹只小小码农
博客等级 码龄5年 8105粉丝 1333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值