让我们重新审视包括新玩家 Pandas 在内的不同库中的 Case-When:

原文:towardsdatascience.com/lets-revisit-case-when-in-different-libraries-including-the-new-player-pandas-8c4febb979ba

无论您是在进行数据分析、数据清洗,甚至特征工程,创建基于其他列值的新列都是一个经常进行的操作。

我用于数据清洗和操作的所有工具都有用于此任务的函数(例如 SQL、R 数据表、PySpark)。我们现在游戏中有一个新玩家:Pandas。

顺便说一句,使用 Pandas 可以创建条件列,但它没有专门的 case-when 函数。

在 Pandas 2.2.0 版本中,引入了case_when函数,用于根据一个或多个条件创建一个 Series 对象。

让我们回顾一下如何使用常用的数据分析和处理工具完成这个非常有用的操作。

为了保持一致性并更容易地发现工具之间的差异,我们将使用一个小数据集。


SQL

以下是一个名为"mytable"的小 SQL 表。

+-------------+----------+---------+|a|b|c|+-------------+----------+---------+|0|5|1||1|-1|0||5|20|0||4|8|1||4|4|1||10|7|0||4|2|1|+-------------+----------+---------+

我们将基于现有列的值创建一个新列。以下是条件:

  • 如果列 a 大于列 b,则取列 a 的值

  • 如果列 a 小于列 b,则取列 a 和列 c 的乘积

  • 否则(即列 a 等于列 b),取列 a 和列 b 的和

我们可以创建所需数量的条件,并使它们变得更加复杂,但这三个条件足以学习 case when 逻辑。

让我们将新列命名为"d",以下是创建此列的 SQL 代码,基于上述两个条件:

select(casewhen a>b then a when a<b then a*celsea+b end)asdfrommytable

此 SQL 代码仅创建并选择"mytable"中的列 d。如果您还需要它返回其他列(即 a、b 和 c),只需在 select 语句中写出它们:

select a,b,c,(casewhen a>b then a when a<b then a*celsea+b end)asdfrommytable

R 数据表

数据表包是 R 编程语言的一个高效的数据分析和操作工具。

现在,我们将学习如何使用此包创建条件列 d。首先,我们创建一个包含与我们的 SQL 表相同列的数据表。

mytable<-data.table(a=c(0,1,5,4,4,10,4),b=c(5,-1,20,8,4,7,2),c=c(1,0,0,1,1,0,1))

数据表中的逻辑条件可以使用fcase函数实现。我们可以写出条件,然后通过逗号分隔的相应值。

以下是我们可以根据之前给出的条件创建列 d 的方法:

mytable[,d:=(fcase(a>b,a,a<b,a*c,a==b,a+b))]

fcase函数中的第一个表达式(a > b)是第一个条件,第二个表达式(a)是其对应值。第三个表达式(a < b)是第二个条件,第四个表达式(a*c)是其对应值,依此类推。

现在数据表"mytable"看起来如下所示:

a b c d1:05102:1-1013:520004:48145:44186:1070107:4214

PySpark

PySpark 是 Spark 的 Python API,Spark 是一个用于大规模数据处理的分析引擎。当涉及到处理数十亿行数据的集时,Spark 通常是首选工具。

PySpark API 非常直观,语法易于理解。让我们首先创建一个包含与之前相同的列和值的 Spark DataFrame。

frompyspark.sqlimportSparkSessionfrompyspark.sqlimportfunctionsasF spark=SparkSession.builder.getOrCreate()data=[{"a":0,"b":5,"c":1},{"a":1,"b":-1,"c":0},{"a":5,"b":20,"c":0},{"a":4,"b":8,"c":1},{"a":4,"b":4,"c":1},{"a":10,"b":7,"c":0},{"a":4,"b":2,"c":1}]mytable=spark.createDataFrame(data)

我们首先启动了一个 spark 会话,然后创建了 DataFrame。请注意,如果你在一个像 Databricks 这样的开发环境中工作,你不需要明确创建 spark 会话。

我们可以使用withColumn函数来创建新列,并基于我们将使用的多个条件来确定其值,可以使用when函数。

mytable=(mytable.withColumn("d",F.when(F.col("a")&gt;F.col("b"),F.col("a")).when(F.col("a")&lt;F.col("b"),F.col("a")*F.col("c")).otherwise(F.col("a")+F.col("b"))))mytable.show()+---+---+---+---+|a|b|c|d|+---+---+---+---+|0|5|1|0||1|-1|0|1||5|20|0|0||4|8|1|4||4|4|1|8||10|7|0|10||4|2|1|4|+---+---+---+---+

与之前的工具一样,我们可以根据需要组合多个条件。每个条件都将有自己的when函数,而最终条件(即如果前面的所有条件都不满足)的值将使用otherwise函数指定。


Pandas

Pandas 可能是最常使用的数据分析和操作工具。在 2.2.0 版本之前,我们没有在 Pandas 中遇到函数的情况。我们仍然可以使用其他函数(如 Pandas 的where函数或 NumPy 的whereselect函数)来处理这些操作。然而,现在 Pandas 中有一个case_when函数,让我们看看它是如何被用来完成我们在本文中用其他工具展示的任务的。

让我们首先创建 Pandas DataFrame。

importpandasaspd mytable=pd.DataFrame({"a":[0,1,5,4,4,10,4],"b":[5,-1,20,8,4,7,2],"c":[1,0,0,1,1,0,1]})

case_when函数接受一个案例列表作为参数,该列表包含条件和相应的值作为tuples。

caselist=[(mytable["a"]&gt;mytable["b"],mytable["a"]),(mytable["a"]&lt;mytable["b"],mytable["a"]*mytable["c"]),(mytable["a"]==mytable["b"],mytable["a"]+mytable["b"])]mytable.loc[:,"d"]=mytable["a"].case_when(caselist)mytable a b c d0051011-1012520003481444418510701064214

caselist中的每个元组包含一个条件和相应的值。重要的是要注意,case_when函数是应用于 DataFrame 中的列。如果有任何行没有满足给定的任何条件,那么新列中的该行将取原始列的值。

在上面的例子中,如果有这样的行,列 d 中的对应值将来自列 a。让我们通过在caselist中移除最后一个条件来试一试。

caselist=[(mytable["a"]&gt;mytable["b"],mytable["a"]),(mytable["a"]&lt;mytable["b"],mytable["a"]*mytable["c"])]mytable.loc[:,"d"]=mytable["a"].case_when(caselist)mytable a b c d0051011-1012520003481444414510701064214

看看第 4 行的值。列 d 的值与列 a 的值相同。


最后的话

数据清洗、分析和操作有很多工具和库。在大多数情况下,你使用哪个工具是一个选择问题。所有这些工具都能高效地完成典型任务。然而,了解如何使用不同的工具进行某些操作仍然是个好主意。

在这篇文章中,我们学习了如何使用 SQL、PySpark、R 数据表和 Pandas 创建条件列。

感谢阅读。如果您有任何反馈,请告诉我。

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

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

相关文章

BlindWaterMark盲水印终极指南:5分钟学会图像版权保护

BlindWaterMark盲水印终极指南&#xff1a;5分钟学会图像版权保护 【免费下载链接】BlindWaterMark 盲水印 by python 项目地址: https://gitcode.com/gh_mirrors/bli/BlindWaterMark 在数字时代&#xff0c;图像版权保护变得前所未有的重要。BlindWaterMark作为一款基于…

HunyuanVideo-Foley:革命性AI音效生成技术重塑视频创作生态

HunyuanVideo-Foley&#xff1a;革命性AI音效生成技术重塑视频创作生态 【免费下载链接】HunyuanVideo-Foley 项目地址: https://ai.gitcode.com/tencent_hunyuan/HunyuanVideo-Foley 在视频内容创作成为主流的今天&#xff0c;AI音效生成技术正在彻底改变传统音效制作…

vivado安装包组件选择策略:入门级完整示例参考

Vivado安装组件怎么选&#xff1f;新手避坑指南&#xff1a;从零构建轻量高效FPGA开发环境你是不是也经历过这样的场景——花两三个小时下载Vivado安装包&#xff0c;勾选“全部安装”&#xff0c;结果磁盘直接爆满、系统卡顿、启动缓慢……最后发现&#xff0c;90%的功能根本用…

2026专科生必备!8个降AI率工具测评榜单

2026专科生必备&#xff01;8个降AI率工具测评榜单 为什么专科生需要一份靠谱的降AI率工具榜单&#xff1f; 随着人工智能技术在学术领域的广泛应用&#xff0c;论文、报告甚至作业的AI检测标准也在不断提升。对于专科生而言&#xff0c;如何在保证内容质量的同时降低AI率&…

使用 Python 多线程提升你的编码技能

原文&#xff1a;towardsdatascience.com/level-up-your-coding-skills-with-python-threading-8f1bd06b9476 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9cbfec975450d8357e227d828448ea09.png 由Sonika Agarwal在Unsplash上的照片 …

ESP32连接阿里云MQTT:网络协议栈配置实战案例

ESP32连接阿里云MQTT实战&#xff1a;从协议栈配置到稳定上线的完整路径 你有没有遇到过这样的场景&#xff1f; ESP32明明连上了Wi-Fi&#xff0c;IP也拿到了&#xff0c;可就是连不上阿里云&#xff1b;日志里反复打印“TLS handshake failed”或“Connection timeout”&am…

[特殊字符]_网络IO性能优化:从TCP到HTTP的层层优化[20260106161818]

作为一名专注于网络性能优化的工程师&#xff0c;我在过去的项目中积累了丰富的网络IO优化经验。最近&#xff0c;我参与了一个对网络性能要求极高的项目——实时视频流平台。这个项目让我重新审视了Web框架在网络IO方面的表现。今天我要分享的是基于真实项目经验的网络IO性能优…

利用 KeyBERT、HDBSCAN 和 Zephyr-7B-Beta 构建知识图谱

原文&#xff1a;towardsdatascience.com/leverage-keybert-hdbscan-and-zephyr-7b-beta-to-build-a-knowledge-graph-33d7534ee01b?sourcecollection_archive---------0-----------------------#2024-01-07 增强型大语言模型自然语言处理与传统机器学习技术结合&#xff0c;用…

SAPlink终极指南:5个技巧掌握ABAP对象高效管理

SAPlink终极指南&#xff1a;5个技巧掌握ABAP对象高效管理 【免费下载链接】SAPlink SAPlink 项目地址: https://gitcode.com/gh_mirrors/sa/SAPlink SAPlink是一款专为SAP Netweaver系统设计的ABAP对象导入导出工具&#xff0c;通过独特的Nugget文件格式实现了代码的便…

ms-swift支持训练任务超时自动终止释放资源

ms-swift支持训练任务超时自动终止释放资源 在大模型时代&#xff0c;一个看似微不足道的“卡住”任务&#xff0c;可能意味着数小时GPU算力的浪费、数千元云成本的流失&#xff0c;甚至影响整个团队的迭代节奏。你有没有经历过这样的场景&#xff1a;提交了一个LoRA微调任务&…

得意黑 Smiley Sans 字体安装与应用全攻略:从下载到专业设计的完美指南

得意黑 Smiley Sans 字体安装与应用全攻略&#xff1a;从下载到专业设计的完美指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans&#xff1a;一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 还在为字体安…

STNodeEditor实战指南:构建高效可视化编程工作流

STNodeEditor实战指南&#xff1a;构建高效可视化编程工作流 【免费下载链接】STNodeEditor 一款基于.Net WinForm的节点编辑器 纯GDI绘制 使用方式非常简洁 提供了丰富的属性以及事件 可以非常方便的完成节点之间数据的交互及通知 大量的虚函数供开发者重写具有很高的自由性 …

盲水印终极使用指南:保护图像版权的完整解决方案

盲水印终极使用指南&#xff1a;保护图像版权的完整解决方案 【免费下载链接】BlindWaterMark 盲水印 by python 项目地址: https://gitcode.com/gh_mirrors/bli/BlindWaterMark 盲水印技术是现代数字版权保护的重要工具&#xff0c;它能在不改变图像视觉质量的前提下&a…

常见网络安全威胁和防御措施

网络安全威胁是一种技术风险&#xff0c;会削弱企业网络的防御能力&#xff0c;危及专有数据、关键应用程序和整个 IT 基础设施。由于企业面临广泛的威胁&#xff0c;因此他们应该仔细监控和缓解最关键的威胁和漏洞。网络安全问题有七大类&#xff0c;它们都包括多种威胁&#…

ncmdumpGUI终极指南:网易云音乐NCM格式转换完整解决方案

ncmdumpGUI终极指南&#xff1a;网易云音乐NCM格式转换完整解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在音乐数字化时代&#xff0c;网易云音乐的…

终极SAP开发利器:SAPlink高效代码迁移完全指南

终极SAP开发利器&#xff1a;SAPlink高效代码迁移完全指南 【免费下载链接】SAPlink SAPlink 项目地址: https://gitcode.com/gh_mirrors/sa/SAPlink 在传统的SAP Netweaver开发环境中&#xff0c;ABAP程序员常常面临一个痛点&#xff1a;如何在不同系统间安全、高效地迁…

视频字幕制作效率革命:AI智能助手如何10倍提升创作生产力

视频字幕制作效率革命&#xff1a;AI智能助手如何10倍提升创作生产力 【免费下载链接】VideoCaptioner &#x1f3ac; 卡卡字幕助手 | VideoCaptioner - 基于 LLM 的智能字幕助手&#xff0c;无需GPU一键高质量字幕视频合成&#xff01;视频字幕生成、断句、校正、字幕翻译全流…

强力解锁ArchiMate企业架构建模:3步安装与5大核心功能深度解析

强力解锁ArchiMate企业架构建模&#xff1a;3步安装与5大核心功能深度解析 【免费下载链接】archi Archi: ArchiMate Modelling Tool 项目地址: https://gitcode.com/gh_mirrors/arc/archi 你是否正在寻找一款功能强大且完全免费的ArchiMate建模工具&#xff1f;Archi正…

解决WPS中Zotero插件双图标冲突的实用指南

解决WPS中Zotero插件双图标冲突的实用指南 【免费下载链接】WPS-Zotero An add-on for WPS Writer to integrate with Zotero. 项目地址: https://gitcode.com/gh_mirrors/wp/WPS-Zotero 当你在WPS Office中同时看到两个Zotero插件图标&#xff0c;其中一个无法正常使用…

KLayout终极指南:从入门到精通的完整版图设计解决方案

KLayout终极指南&#xff1a;从入门到精通的完整版图设计解决方案 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout作为一款专业的集成电路版图设计工具&#xff0c;以其轻量级架构和全功能覆盖在EDA领域占…