网站首页 > 技术文章 正文
sql中的case when的功能是实现单列或者多列的条件统计,其实Pandas也可以实现的,比如万能的apply方法,就是写起来复杂一些,没有sql case when那么直观。
apply方法可以对dataframe、series执行特定函数,其实很强大,因为python什么逻辑都可以写。
举个例子,一张考试成绩的表scores,有语文和数学的得分,现在给考生综合打分,两门都在90以上打A,都在80-90之间打B,其他则打C。
这里如果用sql来查询的话,使用case when就很简单明了。
SELECT *,
CASE
WHEN chinese_score >= 90AND math_score >= 90THEN'A'
WHEN chinese_score >= 80AND math_score >= 80THEN'B'
ELSE'C'
ENDAS score_type
FROM scores
如果用pandas apply方法来实现的话,需要自定义一个判断函数,用来对成绩进行分类。
然后用apply方法应用到dataframe上,以下是完整代码,可以放到本地电脑跑。
import pandas as pd
# 示例数据
data = {
'chinese_score': [90, 80, 79, 100, 89],
'math_score': [91, 95, 79, 99, 89],
}
df = pd.DataFrame(data)
# 定义条件判断函数
def check_conditions(row):
# 条件1:年龄>30,分数>80,性别为男性
result = 'A'if (row['chinese_score'] >= 90) and (row['math_score'] >= 90) \
else'B'if (row['chinese_score'] >= 80) and (row['math_score'] >= 80) \
else'C'
return result
# 应用apply生成标记列
score_type_1 = df.apply(check_conditions, axis=1)
score_type_1
逻辑也很简单,判断函数实现多列的判断条件,apply将该判断函数应用到数据集上,就能实现类似sql case when的功能。
apply的应用场景很多,远比你想象的多得多,比如一张学生成绩信息的表,它可以给每位学生通过deepseek制定个性化的提升建议。
除了pandas apply能实现case when的功能外,numpy的select方法也能搞定,而且更为通用、简洁,建议试试。
import numpy as np
import pandas as pd
# 示例数据
data = {
'chinese_score': [90, 80, 79, 100, 89],
'math_score': [91, 95, 79, 99, 89],
}
df = pd.DataFrame(data)
# 定义条件和对应的值
conditions = [
(df['chinese_score'] >= 90) & (df['math_score'] >= 90),
(df['chinese_score'] >= 80) & (df['math_score'] >= 80)
]
choices = ['A', 'B']
# select方法
score_type_1 = np.select(conditions, choices, default='C')
score_type_1
numpy select方法类似case when语法,通过一个多列条件判断,区分不同的分类。
除了这两种,其实pandas种还有不少能实现的途径,但没必要尝试,因为这两种相对通用便捷,且符合python哲学。
猜你喜欢
- 2025-05-05 python unittest 基本用法(python3 unittest)
- 2025-05-05 使用pytest进行单元测试(pytest详解)
- 2025-05-05 用扣子开发一个图灵测试游戏(用扣子开发一个图灵测试游戏的软件)
- 2025-05-05 Python进阶-day19: 测试与调试(python测验)
- 2025-05-05 零起点Python机器学习快速入门-4-3-字符串常用方法
- 2025-05-05 Python + Unittest 之 DDT 的原理解析
- 2025-05-05 shell脚本基本语法(上)看完这个麻麻再也不担心我不会Linux了
- 2025-05-05 软件测试员必看!数据库知识mysql查询语句大全
- 2025-05-05 Python 什么情况下会生成 pyc 文件?
- 2025-05-05 Learn Python If Statements: Basics and Examples for Beginners
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)