社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】Pandas实现sql的case when查询,原来这么简单!

机器学习初学者 • 5 天前 • 38 次点击  

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': [9080 7910089],
    'math_score': [9195799989],
}
df = pd.DataFrame(data)

# 定义条件判断函数
def check_conditions(row):
    # 条件1:年龄>30,分数>80,性别为男性
    result = 'A'if (row['chinese_score'] >= 90and (row['math_score'] >= 90) \
            else'B'if (row['chinese_score'] >= 80and (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': [90807910089],
    'math_score': [9195799989],
}
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哲学。

图片


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181341
 
38 次点击