Pandas中case_when()方法使用小結(jié)
在 Python 數(shù)據(jù)分析中,Pandas 是一個(gè)強(qiáng)大的庫,用于處理和分析數(shù)據(jù)。它提供了各種各樣的方法和函數(shù),使數(shù)據(jù)轉(zhuǎn)換和操作變得更加容易。在本文中,將深入探討 Pandas 中的 case_when() 方法,它可以用于條件性地創(chuàng)建新的列,類似于 SQL 中的 CASE WHEN 語句。我們將詳細(xì)討論該方法的用法,并提供豐富的示例代碼。
什么是 case_when() 方法?
case_when() 方法是 Pandas 庫中的一個(gè)函數(shù),它允許我們根據(jù)條件創(chuàng)建新的列。這個(gè)方法通常用于根據(jù)數(shù)據(jù)的某些特征或條件來生成新的數(shù)據(jù)列,類似于使用 if-else 語句進(jìn)行條件判斷。
在 Pandas 中,case_when() 方法通常與 apply() 方法結(jié)合使用,以便根據(jù)條件對(duì)每一行數(shù)據(jù)進(jìn)行操作。它提供了一種更靈活的方式來處理數(shù)據(jù),而不需要編寫大量的條件判斷語句。
case_when() 方法的語法
case_when() 方法的語法如下:
pandas.Series.case_when(conditions, values, default=None, *args, **kwargs)
參數(shù)說明:
conditions:條件列表,用于定義何時(shí)應(yīng)用哪個(gè)值。values:與條件列表中的每個(gè)條件相對(duì)應(yīng)的值列表,用于指定滿足條件時(shí)要應(yīng)用的值。default:可選參數(shù),用于指定默認(rèn)值,當(dāng)沒有條件匹配時(shí)將使用該值。*args和**kwargs:其他參數(shù),用于傳遞給apply()方法。
示例代碼
通過幾個(gè)示例來演示 case_when() 方法的用法。
示例 1:基本用法
假設(shè)有一個(gè)包含學(xué)生分?jǐn)?shù)的數(shù)據(jù)集,我們想根據(jù)分?jǐn)?shù)判斷他們的等級(jí)。
可以使用 case_when() 方法來實(shí)現(xiàn)這個(gè)任務(wù):
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)': [85, 70, 95, 60, 75]}
df = pd.DataFrame(data)
# 定義條件和對(duì)應(yīng)的值
conditions = [df['分?jǐn)?shù)'] >= 90, (df['分?jǐn)?shù)'] >= 80) & (df['分?jǐn)?shù)'] < 90), df['分?jǐn)?shù)'] < 80]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列
df['等級(jí)'] = df['分?jǐn)?shù)'].case_when(conditions, values, default='不及格')
# 輸出結(jié)果
print(df)以上代碼將根據(jù)學(xué)生的分?jǐn)?shù)創(chuàng)建一個(gè)新的等級(jí)列,并根據(jù)條件將相應(yīng)的等級(jí)分配給每個(gè)學(xué)生。
示例 2:使用默認(rèn)值
有時(shí)候,某些數(shù)據(jù)可能不滿足任何條件。在這種情況下,可以使用默認(rèn)值來處理這些情況:
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)': [85, 70, 95, 60, None]}
df = pd.DataFrame(data)
# 定義條件和對(duì)應(yīng)的值
conditions = [df['分?jǐn)?shù)'] >= 90, (df['分?jǐn)?shù)'] >= 80) & (df['分?jǐn)?shù)'] < 90), df['分?jǐn)?shù)'] < 80]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列,并設(shè)置默認(rèn)值為 '未知'
df['等級(jí)'] = df['分?jǐn)?shù)'].case_when(conditions, values, default='未知')
# 輸出結(jié)果
print(df)在這個(gè)示例中,使用了一個(gè)包含空值的數(shù)據(jù)集,并使用 default 參數(shù)將沒有匹配條件的行標(biāo)記為“未知”。
示例 3:使用 apply() 方法
case_when() 方法通常與 apply() 方法一起使用,以便根據(jù)多個(gè)條件對(duì)數(shù)據(jù)集的每一行進(jìn)行操作。
以下是一個(gè)示例,根據(jù)學(xué)生的分?jǐn)?shù)和出勤情況來計(jì)算他們的最終成績(jī):
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)': [85, 70, 95, 60, 75],
'出勤率': [90, 80, 95, 70, 85]}
df = pd.DataFrame(data)
# 使用 apply() 方法將多個(gè)條件應(yīng)用于每一行
def calculate_grade(row):
if row['分?jǐn)?shù)'] >= 90 and row['出勤率'] >= 90:
return '優(yōu)秀'
elif row['分?jǐn)?shù)'] >= 80 and row['出勤率'] >= 80:
return '良好'
elif row['分?jǐn)?shù)'] >= 60 and row['出勤率'] >= 70:
return '及格'
else:
return '不及格'
df['最終成績(jī)'] = df.apply(calculate_grade, axis=1)
# 輸出結(jié)果
print(df)在這個(gè)示例中,使用 apply() 方法定義了一個(gè)自定義函數(shù) calculate_grade(),該函數(shù)基于多個(gè)條件來計(jì)算最終成績(jī),并將其應(yīng)用于數(shù)據(jù)集的每一行。
示例 4:多條件的復(fù)雜情況
有時(shí)候,需要根據(jù)多個(gè)條件的組合來生成新的列。
例如,可以根據(jù)學(xué)生的分?jǐn)?shù)和出勤情況來確定他們是否能夠獲得獎(jiǎng)學(xué)金:
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)': [85, 70, 95, 60, 75],
'出勤率': [90, 80, 95, 70, 85]}
df = pd.DataFrame(data)
# 定義多條件和對(duì)應(yīng)的值
conditions = [(df['分?jǐn)?shù)'] >= 90) & (df['出勤率'] >= 90),
(df['分?jǐn)?shù)'] >= 80) & (df['出勤率'] >= 80),
(df['分?jǐn)?shù)'] >= 60) & (df['出勤率'] >= 70)]
values = ['獲獎(jiǎng)學(xué)金', '榮譽(yù)獎(jiǎng)', '合格']
# 使用 case_when() 方法創(chuàng)建新列
df['獎(jiǎng)勵(lì)'] = df.apply(lambda row: row['分?jǐn)?shù)'].case_when(conditions, values, default='未獲獎(jiǎng)'), axis=1)
# 輸出結(jié)果
print(df)
在這個(gè)示例中,定義了多個(gè)條件和對(duì)應(yīng)的值,并使用 apply() 方法將 case_when() 方法應(yīng)用于每一行數(shù)據(jù),根據(jù)多個(gè)條件的組合來確定是否獲得獎(jiǎng)學(xué)金。
示例 5:根據(jù)多列生成新列
有時(shí)候,需要根據(jù)多列的值生成新的列。
例如,可以根據(jù)學(xué)生的分?jǐn)?shù)和出勤情況來生成一個(gè)總分列:
import pandas as pd
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)1': [85, 70, 95, 60, 75],
'分?jǐn)?shù)2': [90, 80, 85, 70, 90]}
df = pd.DataFrame(data)
# 使用 apply() 方法生成新列
df['總分'] = df.apply(lambda row: row['分?jǐn)?shù)1'] + row['分?jǐn)?shù)2'], axis=1)
# 輸出結(jié)果
print(df)在這個(gè)示例中,使用 apply() 方法將兩列分?jǐn)?shù)相加,生成了一個(gè)新的總分列。
示例 6:處理缺失值
case_when() 方法也可以用于處理缺失值。
例如,可以根據(jù)分?jǐn)?shù)是否缺失來為學(xué)生分配等級(jí):
import pandas as pd
import numpy as np
# 創(chuàng)建示例數(shù)據(jù)集
data = {'學(xué)生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分?jǐn)?shù)': [85, np.nan, 95, 60, 75]}
df = pd.DataFrame(data)
# 定義條件和對(duì)應(yīng)的值
conditions = [df['分?jǐn)?shù)'].notna() & (df['分?jǐn)?shù)'] >= 90),
df['分?jǐn)?shù)'].notna() & (df['分?jǐn)?shù)'] >= 80),
df['分?jǐn)?shù)'].notna() & (df['分?jǐn)?shù)'] >= 60)]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列,并處理缺失值
df['等級(jí)'] = df['分?jǐn)?shù)'].case_when(conditions, values, default='不及格')
# 輸出結(jié)果
print(df)在這個(gè)示例中,使用 notna() 方法來檢查分?jǐn)?shù)是否缺失,并根據(jù)條件來為每個(gè)學(xué)生分配等級(jí)。
總結(jié)
在本文中,深入探討了 Pandas 中的 case_when() 方法的用法,包括基本用法和高級(jí)用法。這個(gè)方法對(duì)于數(shù)據(jù)分析和數(shù)據(jù)轉(zhuǎn)換任務(wù)非常有用,可以根據(jù)條件創(chuàng)建新的列,處理多條件組合和缺失值,并生成新的數(shù)據(jù)集。希望通過本文的示例代碼和解釋,能更好地理解和運(yùn)用 case_when() 方法。這將有助于更靈活地處理各種數(shù)據(jù)分析和數(shù)據(jù)處理任務(wù)。
到此這篇關(guān)于Pandas中case_when()方法使用小結(jié)的文章就介紹到這了,更多相關(guān)Pandas case_when()方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas數(shù)據(jù)分析常用函數(shù)的使用
本文主要介紹了Pandas數(shù)據(jù)分析常用函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Selenium環(huán)境變量配置(火狐瀏覽器)及驗(yàn)證實(shí)現(xiàn)
這篇文章主要介紹了Selenium環(huán)境變量配置(火狐瀏覽器)及驗(yàn)證實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python實(shí)現(xiàn)跨平臺(tái)桌面應(yīng)用程序開發(fā)的完整指南
在當(dāng)今軟件開發(fā)領(lǐng)域,跨平臺(tái)應(yīng)用程序開發(fā)變得越來越重要,下面我們就來探討使用Python進(jìn)行跨平臺(tái)桌面應(yīng)用程序開發(fā)的主要框架,工具和最佳實(shí)踐吧2025-04-04
在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)
在PyCharm中打包Python項(xiàng)目并運(yùn)行到服務(wù)器上,主要步驟包括:創(chuàng)建并設(shè)置項(xiàng)目、編寫項(xiàng)目代碼、打包項(xiàng)目、配置服務(wù)器環(huán)境、上傳可執(zhí)行文件到服務(wù)器以及運(yùn)行項(xiàng)目,通過這些步驟,可以將Python項(xiàng)目打包并部署到服務(wù)器上2024-11-11
解決pycharm安裝scrapy DLL load failed:找不到指定的程序的問題
很多朋友向小編求助pycharm安裝scrapy DLL load failed:找不到指定的程序的問題,就這一問題小編在window10 + anaconda3 +pycharm2020.1.1 + scrapy安裝親測(cè)可用,下面把我的處理過程分享到腳本之家平臺(tái),供大家參考2021-06-06
Python自動(dòng)化辦公之清理重復(fù)文件詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python清理重復(fù)的文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-05-05
Pycharm在創(chuàng)建py文件時(shí),自動(dòng)添加文件頭注釋的實(shí)例
今天小編就為大家分享一篇Pycharm在創(chuàng)建py文件時(shí),自動(dòng)添加文件頭注釋的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python腳本實(shí)現(xiàn)自動(dòng)將數(shù)據(jù)庫備份到 Dropbox
本文給大家分享的是作者使用python腳本實(shí)現(xiàn)自動(dòng)備份mysql數(shù)據(jù)庫到的dropbox網(wǎng)盤的代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2017-02-02

