Pandas中case_when()方法使用小結
在 Python 數(shù)據分析中,Pandas 是一個強大的庫,用于處理和分析數(shù)據。它提供了各種各樣的方法和函數(shù),使數(shù)據轉換和操作變得更加容易。在本文中,將深入探討 Pandas 中的 case_when() 方法,它可以用于條件性地創(chuàng)建新的列,類似于 SQL 中的 CASE WHEN 語句。我們將詳細討論該方法的用法,并提供豐富的示例代碼。
什么是 case_when() 方法?
case_when() 方法是 Pandas 庫中的一個函數(shù),它允許我們根據條件創(chuàng)建新的列。這個方法通常用于根據數(shù)據的某些特征或條件來生成新的數(shù)據列,類似于使用 if-else 語句進行條件判斷。
在 Pandas 中,case_when() 方法通常與 apply() 方法結合使用,以便根據條件對每一行數(shù)據進行操作。它提供了一種更靈活的方式來處理數(shù)據,而不需要編寫大量的條件判斷語句。
case_when() 方法的語法
case_when() 方法的語法如下:
pandas.Series.case_when(conditions, values, default=None, *args, **kwargs)
參數(shù)說明:
conditions:條件列表,用于定義何時應用哪個值。values:與條件列表中的每個條件相對應的值列表,用于指定滿足條件時要應用的值。default:可選參數(shù),用于指定默認值,當沒有條件匹配時將使用該值。*args和**kwargs:其他參數(shù),用于傳遞給apply()方法。
示例代碼
通過幾個示例來演示 case_when() 方法的用法。
示例 1:基本用法
假設有一個包含學生分數(shù)的數(shù)據集,我們想根據分數(shù)判斷他們的等級。
可以使用 case_when() 方法來實現(xiàn)這個任務:
import pandas as pd
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)': [85, 70, 95, 60, 75]}
df = pd.DataFrame(data)
# 定義條件和對應的值
conditions = [df['分數(shù)'] >= 90, (df['分數(shù)'] >= 80) & (df['分數(shù)'] < 90), df['分數(shù)'] < 80]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列
df['等級'] = df['分數(shù)'].case_when(conditions, values, default='不及格')
# 輸出結果
print(df)以上代碼將根據學生的分數(shù)創(chuàng)建一個新的等級列,并根據條件將相應的等級分配給每個學生。
示例 2:使用默認值
有時候,某些數(shù)據可能不滿足任何條件。在這種情況下,可以使用默認值來處理這些情況:
import pandas as pd
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)': [85, 70, 95, 60, None]}
df = pd.DataFrame(data)
# 定義條件和對應的值
conditions = [df['分數(shù)'] >= 90, (df['分數(shù)'] >= 80) & (df['分數(shù)'] < 90), df['分數(shù)'] < 80]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列,并設置默認值為 '未知'
df['等級'] = df['分數(shù)'].case_when(conditions, values, default='未知')
# 輸出結果
print(df)在這個示例中,使用了一個包含空值的數(shù)據集,并使用 default 參數(shù)將沒有匹配條件的行標記為“未知”。
示例 3:使用 apply() 方法
case_when() 方法通常與 apply() 方法一起使用,以便根據多個條件對數(shù)據集的每一行進行操作。
以下是一個示例,根據學生的分數(shù)和出勤情況來計算他們的最終成績:
import pandas as pd
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)': [85, 70, 95, 60, 75],
'出勤率': [90, 80, 95, 70, 85]}
df = pd.DataFrame(data)
# 使用 apply() 方法將多個條件應用于每一行
def calculate_grade(row):
if row['分數(shù)'] >= 90 and row['出勤率'] >= 90:
return '優(yōu)秀'
elif row['分數(shù)'] >= 80 and row['出勤率'] >= 80:
return '良好'
elif row['分數(shù)'] >= 60 and row['出勤率'] >= 70:
return '及格'
else:
return '不及格'
df['最終成績'] = df.apply(calculate_grade, axis=1)
# 輸出結果
print(df)在這個示例中,使用 apply() 方法定義了一個自定義函數(shù) calculate_grade(),該函數(shù)基于多個條件來計算最終成績,并將其應用于數(shù)據集的每一行。
示例 4:多條件的復雜情況
有時候,需要根據多個條件的組合來生成新的列。
例如,可以根據學生的分數(shù)和出勤情況來確定他們是否能夠獲得獎學金:
import pandas as pd
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)': [85, 70, 95, 60, 75],
'出勤率': [90, 80, 95, 70, 85]}
df = pd.DataFrame(data)
# 定義多條件和對應的值
conditions = [(df['分數(shù)'] >= 90) & (df['出勤率'] >= 90),
(df['分數(shù)'] >= 80) & (df['出勤率'] >= 80),
(df['分數(shù)'] >= 60) & (df['出勤率'] >= 70)]
values = ['獲獎學金', '榮譽獎', '合格']
# 使用 case_when() 方法創(chuàng)建新列
df['獎勵'] = df.apply(lambda row: row['分數(shù)'].case_when(conditions, values, default='未獲獎'), axis=1)
# 輸出結果
print(df)
在這個示例中,定義了多個條件和對應的值,并使用 apply() 方法將 case_when() 方法應用于每一行數(shù)據,根據多個條件的組合來確定是否獲得獎學金。
示例 5:根據多列生成新列
有時候,需要根據多列的值生成新的列。
例如,可以根據學生的分數(shù)和出勤情況來生成一個總分列:
import pandas as pd
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)1': [85, 70, 95, 60, 75],
'分數(shù)2': [90, 80, 85, 70, 90]}
df = pd.DataFrame(data)
# 使用 apply() 方法生成新列
df['總分'] = df.apply(lambda row: row['分數(shù)1'] + row['分數(shù)2'], axis=1)
# 輸出結果
print(df)在這個示例中,使用 apply() 方法將兩列分數(shù)相加,生成了一個新的總分列。
示例 6:處理缺失值
case_when() 方法也可以用于處理缺失值。
例如,可以根據分數(shù)是否缺失來為學生分配等級:
import pandas as pd
import numpy as np
# 創(chuàng)建示例數(shù)據集
data = {'學生姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'分數(shù)': [85, np.nan, 95, 60, 75]}
df = pd.DataFrame(data)
# 定義條件和對應的值
conditions = [df['分數(shù)'].notna() & (df['分數(shù)'] >= 90),
df['分數(shù)'].notna() & (df['分數(shù)'] >= 80),
df['分數(shù)'].notna() & (df['分數(shù)'] >= 60)]
values = ['優(yōu)秀', '良好', '及格']
# 使用 case_when() 方法創(chuàng)建新列,并處理缺失值
df['等級'] = df['分數(shù)'].case_when(conditions, values, default='不及格')
# 輸出結果
print(df)在這個示例中,使用 notna() 方法來檢查分數(shù)是否缺失,并根據條件來為每個學生分配等級。
總結
在本文中,深入探討了 Pandas 中的 case_when() 方法的用法,包括基本用法和高級用法。這個方法對于數(shù)據分析和數(shù)據轉換任務非常有用,可以根據條件創(chuàng)建新的列,處理多條件組合和缺失值,并生成新的數(shù)據集。希望通過本文的示例代碼和解釋,能更好地理解和運用 case_when() 方法。這將有助于更靈活地處理各種數(shù)據分析和數(shù)據處理任務。
到此這篇關于Pandas中case_when()方法使用小結的文章就介紹到這了,更多相關Pandas case_when()方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python的pytest框架之命令行參數(shù)詳解(下)
這篇文章主要介紹了python的pytest框架之命令行參數(shù)詳解,今天將繼續(xù)更新其他一些命令選項的使用,和pytest收集測試用例的規(guī)則,需要的朋友可以參考下2019-06-06
Python+Tableau廣東省人口普查可視化的實現(xiàn)
本文將結合實例代碼,介紹Python+Tableau廣東省人口普查可視化,第七次人口普查數(shù)據分析,繪制歷次人口普查人口數(shù)量變化圖,需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
python使用xlrd實現(xiàn)檢索excel中某列含有指定字符串記錄的方法
這篇文章主要介紹了python使用xlrd實現(xiàn)檢索excel中某列含有指定字符串記錄的方法,涉及Python使用xlrd模塊檢索Excel的技巧,非常具有實用價值,需要的朋友可以參考下2015-05-05
詳解Python利用APScheduler框架實現(xiàn)定時任務
在做一些python工具的時候,常常會碰到定時器問題,總覺著使用threading.timer或者schedule模塊非常不優(yōu)雅。所以本文將利用APScheduler框架實現(xiàn)定時任務,需要的可以參考一下2022-03-03

