pandas條件替換值(where&mask)

来源:https://www.cnblogs.com/itelephant/archive/2023/02/23/17147902.html
-Advertisement-
Play Games

pandas條件替換值(where&mask) 在日常分析中,經常會遇到對數據的篩選處理相關的工作,我們可以使用loc和iloc定位分析篩選的列或行數據,下麵介紹一種高級篩選的用法where和mask。 pd.where: 替換條件(condition)為Flase處的值 pd.mask: 替換條件 ...


pandas條件替換值(where&mask)

在日常分析中,經常會遇到對數據的篩選處理相關的工作,我們可以使用lociloc定位分析篩選的列或行數據,下麵介紹一種高級篩選的用法wheremask

pd.where: 替換條件(condition)為Flase處的值

pd.mask: 替換條件(condition)為True處的值

np.where: 替換條件,類似三元表達式

# 條件不成立時,值替換成other
pd.where(self, cond, other=nan, inplace=False,
        axis=None, level=None, errors='raise', try_cast=False)
# 條件成立時,值替換成other
pd.mask(self, cond, other=nan, inplace=False,
		axis=None, level=None, errors='raise', try_cast=False)
# 條件成立時,值為x;不成立時,值為y
np.where(condition, x, y)

首先模擬一組學生成績表數據:

import pandas as pd
import numpy as np

# 設置學科
subjects = ['math', 'chinese', 'english', 'history']

# 設置學生
students = ['Tom', 'Alice', 'Bobby', 'Candy', 'David', 'Eva', 'Frank', 'Grace', 'Howard', 'Ivy',
            'John', 'Karen', 'Larry', 'Marie', 'Nancy', 'Oscar', 'Peter', 'Queen', 'Robert', 'Susan']

# 隨機生成成績
score = np.random.randint(low=0, high=100, size=(len(students), len(subjects)))

# 生成DataFrame
df = pd.DataFrame(
    score,
    columns=subjects,
    index=students
)
df
math chinese english history
Tom 24 57 60 44
Alice 92 25 64 26
Bobby 96 61 94 96
Candy 36 87 10 38
David 29 73 37 64
Eva 94 40 30 81
Frank 24 44 40 14
Grace 37 70 50 5
Howard 82 86 46 10
Ivy 24 7 30 30
John 39 32 97 48
Karen 68 29 34 11
Larry 82 5 3 78
Marie 96 83 73 63
Nancy 25 33 37 53
Oscar 2 65 49 73
Peter 9 19 11 67
Queen 44 19 85 23
Robert 75 35 47 77
Susan 71 6 10 82

1 pd.where

  • where(條件, pd.NA)

值替換:pandas中的where方法,如果 條件 為真,保持原來的值,否則替換為other

增加欄位 math_pass, 數學成績大於60,為及格, 否則為不及格

df1 = df.copy()
# 預設及格
df1['math_pass'] = '及格'
df1['math_pass'] = df1['math_pass'].where(df1['math'] > 60, '不及格')
df1
math chinese english history math_pass
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

2 np.where

numpy中的where使用,與pandas有所不同

# 條件成立時,值為x;不成立時,值為y
np.where(condition, x, y)

增加欄位 math_pass2, 數學成績大於60,為及格, 否則為不及格

df2 = df.copy()
# 數學成績大於60,為及格, 否則為不及格
df2['math_pass2'] = np.where(df2['math'] > 60, '及格', '不及格')
df2
math chinese english history math_pass2
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

3 pd.mask

值替換:pandas中的mask方法,如果 條件 為真,值替換為other

增加欄位 math_pass3, 數學成績大於60,為及格, 否則為不及格

df3 = df.copy()
df3['math_pass3'] = '不及格'
df3['math_pass3'] = df3['math_pass3'].mask(df3['math'] > 60, '及格')
df3
math chinese english history math_pass3
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 監聽的文件變化的方式有很多,但是比較完美的還是jNotify https://jnotify.sourceforge.net/ 對比一下監控方式的優缺點 | 方式 | 缺點 | | | | |java原生watch | 可能對文件時間獲取有缺毫秒的問題 | |commons-io | 沒有文件重命名 ...
  • Java基礎語法:運算符、包機制、JavaDoc 自增、自減、一元運算符:++、-- 例子:b = a++; -->先給b賦值,a再自增:b=a; a=a+1; b = ++a; -->a先自增,再給b賦值:a=a+1; b=a; 初識Math類 冪運算:Math.pow(a, b):其中a與b都是 ...
  • 教程簡介 適用於初學者的Apache HttpClient教程 - 從基本到高級概念的簡單簡單步驟學習Apache HttpClient,其中包括概述,環境設置,Http獲取請求,Http Post請求,響應處理程式,關閉連接,中止請求,攔截器,用戶身份驗證等示例,使用代理,代理身份驗證,基於表單的 ...
  • C語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入C語言代碼,點擊運行,可線上編譯運行C語言,C語言代碼線上運行調試,C語言線上編譯,可快速線上測試您的C語言代碼,線上編譯C語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提供,線上工具後端由眾多Doc ...
  • 不知道各位老色批們平常看視頻都是在哪裡看的,有人說某魚舞蹈區,有人說某牙舞蹈區,要我說都不如西瓜shipin,這裡面個個都是人才,說話又好聽,超喜歡這裡的… 好了話不多說,我們直接開始本次的內容。 模塊安裝 本次需要使用的模塊是requests 模塊,沒安裝的小伙伴直接pip安裝即可。 環境 本次使 ...
  • 現在市面上有很多免費的FTP軟體:如FileZilla ,那如果想自己在代碼中實現與ftp伺服器的上傳下載文件該如何實現那? 本質上ftp協議就是TCP基礎上建立的一種協議,具體如下。 FTP 概述 文件傳輸協議(FTP)作為網路共用文件的傳輸協議,在網路應用軟體中具有廣泛的應用。FTP的目標是提高 ...
  • 一.正常加鎖 當兩個用戶同時註冊一個用戶名時,為保證用戶名不能重覆,因此對其註冊的用戶名加鎖。 具體步驟: 獲得用戶註冊的用戶名,進行判斷,如果為空則對其進行加鎖,保存到資料庫,釋放鎖資源。 二.線程出現阻塞 當A線程加鎖後出現阻塞時,導致數據還沒有存到資料庫,鎖的時間便會失效。 B線程便會執行,對 ...
  • 睏倦的時候寫了個個獲取本地時間,列印總比當前時間大8小時,找了很久原因 package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now) fmt.Println("nowStr:", now.F ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...