利用Pandas進行條件替換與向前填充

目錄

  • 一、需求
  • 二、實現代碼
    • 案例代碼
    • 詳細解釋
      • 1. 導入庫和創建數據
      • 2. 條件替換與填充
        • a. 條件掩碼 - `mask()`
        • b. 向前填充 - `ffill()`
        • c. 類型轉換 - `astype(int)`
      • 3. 打印結果
  • 三、實際應用場景
  • 四、可能的變體
  • 五、總結

一、需求

示例數據:

   項  目
0  1  0
1  0  1
2  0  2
3  0  3
4  0  4

使用 Pandas 實現當 目 列的值不為 0 時,將當前行的 項 列值修改為上一行的 項 列值:

   項  目
0  1  0
1  1  1
2  1  2
3  1  3
4  1  4

二、實現代碼

案例代碼

import pandas as pd# 創建示例數據
df = pd.DataFrame({'項': [1, 0, 0, 0, 0],'目': [0, 1, 2, 3, 4]
})
print(df)# 當`目`列不為0時,`項`列的值被替換為NaN,然后向前填充
df['項'] = df['項'].mask(df['目'] != 0).ffill().astype(int)print(df)

詳細解釋

1. 導入庫和創建數據

import pandas as pd# 創建示例數據
df = pd.DataFrame({'項': [1, 0, 0, 0, 0],'目': [0, 1, 2, 3, 4]
})
  • 首先導入Pandas庫并簡稱為pd
  • 創建一個DataFrame df,包含兩列:
    • "項"列:初始值為[1, 0, 0, 0, 0]
    • "目"列:初始值為[0, 1, 2, 3, 4]

初始數據如下:

   項  目
0  1  0
1  0  1
2  0  2
3  0  3
4  0  4

2. 條件替換與填充

df['項'] = df['項'].mask(df['目'] != 0).ffill().astype(int)

這行代碼執行了多個操作,我們將其分解:

a. 條件掩碼 - mask()

df['項'].mask(df['目'] != 0)

  • df['目'] != 0 創建一個布爾Series:[False, True, True, True, True]
  • mask()函數會用NaN替換滿足條件(True)的位置
  • 結果:"項"列變為 [1, NaN, NaN, NaN, NaN]
b. 向前填充 - ffill()

.ffill()

  • 向前填充(Forward Fill)方法會用前一個有效值填充NaN
  • 對于我們的數據:
    • 第一個值是1(保持不變)
    • 后續NaN被前一個有效值1填充
  • 結果:"項"列變為 [1, 1, 1, 1, 1]
c. 類型轉換 - astype(int)

.astype(int)

  • 將填充后的浮點數(因為NaN是浮點類型)轉換為整數
  • 最終"項"列變為 [1, 1, 1, 1, 1]

3. 打印結果

print(df)

輸出結果:

   項  目
0  1  0
1  1  1
2  1  2
3  1  3
4  1  4

三、實際應用場景

這種操作在實際數據處理中很有用,例如:

  1. 數據清洗:當某列(如"目")有特定值時,需要重置另一列(如"項")的值
  2. 時間序列處理:在某個事件發生后(如"目"列不為0表示事件發生),需要保持某個狀態(如"項"列的值)
  3. 標記傳播:將某個標記從特定點向前傳播

四、可能的變體

  1. 向后填充:使用.bfill()而不是.ffill()
  2. 不同條件:可以修改mask的條件邏輯
  3. 填充特定值:可以使用.fillna()填充特定值而非前向填充

五、總結

這段代碼展示了Pandas中幾個強大功能的組合使用:

  • mask():基于條件替換值
  • ffill():向前填充缺失值
  • astype():數據類型轉換

通過這種組合,可以高效地實現復雜的數據轉換邏輯,這在數據預處理和分析中非常常見。理解這些基本操作的組合方式,可以幫助我們更靈活地處理各種數據清洗和轉換任務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913885.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot數據脫敏(接口級別)

文章目錄自定義脫敏注解脫敏注解接口脫敏注解反射AOP實現字段脫敏切面定義脫敏策略脫敏策略的接口電話號碼脫敏策略郵箱脫敏不脫敏姓名脫敏身份證號脫敏JacksonAOP實現脫敏定義序列化序列化實現脫敏切面定義JacksonThreadLocal攔截器實現脫敏定義ThreadLocal自定義序列化序列化…

Spring核心原理的快速入門:快速了解IoC與DI

IoC IoC:Inversion of Control(控制反轉) Spring是一個包含了眾多工具的IoC容器(即bean:spring管理的對象),也就是說Spring 是一個“控制反轉”的容器。 之前是對象本身管理自己的生命周期等等,現在交給spring來管理對象的生命周期 IoC介紹 …

ffmpeg 中config 文件一些理解

依賴檢查 config中看到最多的是: ... nvenc_deps"ffnvcodec" nvenc_deps_any"libdl LoadLibrary" nvenc_encoder_deps"nvenc" ... h264_crystalhd_decoder_select"crystalhd h264_mp4toannexb_bsf h264_parser" h264_cuvid…

Digital Rainwater Collection System (v1.0)

The law doesn’t punish the masses. If only one guy runs his own rainwater system, he gets fined for “illegal mining.” But if millions of households self-host their “digital wells,” the whole centralized model collapses. Cloud providers and regulators …

NFS文件存儲及部署論壇(小白的“升級打怪”成長之路)

目錄 一、概述 NFS掛載原理 NFS工作原理 RPC與NFS通訊過程 二、NFS服務安裝與啟停 NFS服務安裝 NFS服務啟停 三、NFS服務配置文件 四、NFS文件共享配置文件 配置參數說明 五、命令解析 六、客戶端訪問 七、客戶端掛載 實戰案例 部署NFS文件存儲及discuz論壇應用 …

JavaScript 對象創建:new 操作符全解析

引言 在 JavaScript 中,new 操作符是實現面向對象編程的??核心機制??之一。本文將從原理層面對 new 操作符進行深度剖析,探討其工作機制、內部實現和實際應用場景。無論您是 JavaScript 初學者還是資深開發者,都能從本文獲得以下知識和技…

Spring Boot + Vue.js 全棧開發:從前后端分離到高效部署,打造你的MVP利器!

文章目錄一、為何選擇 Spring Boot Vue.js?全棧開發的“黃金搭檔”!二、項目初始化與基礎架構搭建2.1 后端:初始化 Spring Boot 項目2.2 前端:初始化 Vue.js 項目2.3 核心配置:打通前后端通信與跨域!后端 …

容器技術技術入門與Docker環境部署

目錄 一:Docker 概述 1:什么是Docker 2:Docker 的優勢 3:Docker的應用場景 4:Docker核心概念 二:Docker 安裝 三:Docker 鏡像操作 1:獲取鏡像 2:查看鏡像信息 3&#xff1a…

構建高效分布式系統:bRPC組合Channels與HTTP/H2訪問指南

構建高效分布式系統:bRPC組合Channels與HTTP/H2訪問指南 引言 在現代分布式系統中,下游服務訪問的復雜性日益增加。bRPC通過組合Channels和HTTP/H2訪問優化,提供了解決多層級RPC調用、負載均衡和協議兼容性問題的完整方案。本文將深入解析兩大…

WSL創建Ubuntu子系統與 VS code 開發

文章目錄一、打開Windows的虛擬化基礎功能二、安裝WSL和Ubuntu1. 安裝 WSL2. 安裝 Ubuntu三、 VScode一、打開Windows的虛擬化基礎功能 控制面板-程序和功能-啟動或關閉Windows功能,勾選適用于Linux的Windows子系統、虛擬機平臺, 完成后根據提示重啟電腦…

AlpineLinux二進制文件部署prometheus

在Alpine Linux上通過二進制文件部署Prometheus的步驟如下: 創建用戶和組: groupadd prometheus useradd -g prometheus -m -s /sbin/nologin prometheus下載Prometheus二進制文件: 你可以從Prometheus的官方GitHub發布頁面下載最新的二進制文件。例如,使用wget命令: wget…

IoT 小程序:如何破解設備互聯的碎片化困局?

一、IoT 設備管理為何需要輕量化解決方案?隨著物聯網設備規模爆發式增長 —— 預計 2025 年全球連接數將達 270 億臺,傳統 Native 應用開發模式的弊端日益凸顯:某智能家居廠商開發 3 款主流設備 APP,需維護 iOS/Android/ 小程序 3…

Word 怎么讓字變大、變粗、換顏色?

這是Word中最常用也最基礎的操作之一。學會它,你的文檔就會立刻變得重點突出,清晰易讀。 記住一個核心前提:無論做什么格式修改,第一步永遠是【先選中你要修改的文字】。 你可以把鼠標放在文字的開頭,按住左鍵&#xf…

Ruby 安裝 - Linux

Ruby 安裝 - Linux 引言 Ruby 是一種廣泛使用的高級編程語言,以其簡潔、優雅和強大的功能而聞名。在 Linux 系統上安裝 Ruby 是許多開發者的首要任務。本文將詳細介紹如何在 Linux 系統上安裝 Ruby,包括準備工作、安裝過程和常見問題解決。 準備工作 在開始安裝 Ruby 之前…

數組的應用示例

任意輸入【0,9】范圍內的整數&#xff0c;統計輸入的每一種數字的個數并輸出&#xff0c;輸入-1結束程序 #include <stdio.h> int main(){const int number 10;int x;int i;int count[number];for ( i 0; i < number; i){count[i] 0;}printf("請輸入0&#xf…

鴻蒙智行6月交付新車52747輛 單日交付量3651輛

近日&#xff0c;鴻蒙智行公布最新銷量數據&#xff0c;6月單月全系交付52747輛&#xff0c;單日交付量3651輛&#xff0c;分別刷新鴻蒙智行單月、單日銷量歷史新高。僅用39個月實現全系累計交付80萬輛&#xff0c;創下新勢力汽車最快交付紀錄。 尊界S800自5月30日上市以來&…

基于模糊控制及BP神經網絡開關磁阻電機的matlab仿真

1.模型簡介本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2015Rb&#xff09;軟件。2.仿真算法:1&#xff09;采用轉速、轉矩雙閉環控制算法&#xff1b;2&#xff09;外環是速度環&#xff0c;采用改進復合模糊控制&#xff0c;實現速度跟蹤&#xff1b;3&#xff09;…

最新團購源碼商城 虛擬商城系統源碼 全開源

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 最新團購源碼商城 虛擬商城系統源碼 全開源 基于PHP開發的多功能在線商城系統&#xff0c;適合個人、小型企業或創業團隊快速搭建自己的商品銷售平臺。系統界面美觀&#xff0c;功能豐富…

Visual Studio 舊版軟件下載教程

一、前言最近在開發過程中編譯使用Cuda的版本較低&#xff0c;導致與最新的Visual Studio Community 2022 17.14.8不兼容。編譯報錯如下&#xff1a;[cmake] C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\yvals_core.h(902): e…

樂橙亮相2025廣州建博會:用AI重新定義家庭安全與技術邊界

在智能鎖邁入AI新時代的關鍵節點&#xff0c;誰才是真正的技術引領者&#xff1f;2025年廣州建博會&#xff0c;樂橙用一場“不炫技、重本質”的深度展演給出了答案。智哪兒在現場了解到&#xff0c;在A區3.1-28展位&#xff0c;樂橙圍繞“智啟新境 All in Intelligent”這一主…