Python之數據重塑——【stack()方法和unstack()方法、pivot()方法】

文章目錄

  • 重塑層次化索引
    • 對于單層索引的DataFrame類對象
      • stack()方法
      • unstack()方法
    • 對于多層索引的DataFrame類對象
      • 辨析操作內層索引與外層索引的區別
      • 查看多層索引對象轉換后的類型
  • 軸向旋轉——pivot()方法


重塑層次化索引

Pandas中重塑層次化索引的操作主要是stack()方法和unstack()方法,前者是將數據的列“旋轉”成行,后者是將數據的行“旋轉”成列。

stack(self, level=-1, dropna=True)

上述方法中部分參數表示的含義如下:

  1. level:表示操作內層索引。若設為0,表示操作外層索引,默認為-1
  2. dropna:表示是否將旋轉后的缺失值刪除,若設為True,則表示自動過濾缺失值,設置False則相反

unstack(self, level=-1, fill_value=None)

上述方法中部分參數表示的含義如下:

  1. level:表示操作內層索引。若設為0,表示操作外層索引,默認為-1
  2. fill_value:若產生了缺失值,則可以設置這個參數用來替換NaN

對于單層索引的DataFrame類對象

stack()方法

測試對象:

df1:A   B
a  A0  B0
b  A1  B1

代碼:

import numpy as npdf1 = pd.DataFrame({'A': ['A0', 'A1'],'B': ['B0', 'B1']},index=['a', 'b'])
df2 = pd.DataFrame(np.arange(8).reshape(2, 4),columns=[['A', 'A', 'B', 'B'],['A0', 'A1', 'B0', 'B1']])
result = df1.stack()
print("df1.stack():\n", result)

輸出結果:

df1.stack():a  A    A0B    B0
b  A    A1B    B1
dtype: object

從輸出結果看出,result對象具有兩層行索引。

具有兩層行索引而不再具有列索引的對象到底是DataFrame對象還是Series對象呢?

我們使用type()函數來查看result的類型,與df1做對比

type(df1):<class 'pandas.core.frame.DataFrame'>
type(result):<class 'pandas.core.series.Series'>

從輸出結果可以看出,DataFrame對象已經被轉換成了一個Series對象。


unstack()方法

嘗試將result對象重塑成df1,先將result.unstack()的結果保存在ans對象里

代碼:

ans = result.unstack()
print("ans:\n", ans)

輸出結果:

ans:A   B
a  A0  B0
b  A1  B1

使用type()函數查看ans的類型,然后將其與df1作比較

代碼:

print("type(ans):\n", type(ans))
print("ans == df1?", ans == df1)

輸出結果:

type(ans):<class 'pandas.core.frame.DataFrame'>
ans == df1?A     B
a  True  True
b  True  True

由上可知,unstack()方法是stack()方法的逆操作,可以將重塑的Series對象“恢復原樣”,轉變成原來的DataFrame對象。


對于多層索引的DataFrame類對象

測試對象:

df2:A     B   A0 A1 A0 A1
0  0  1  2  3
1  4  5  6  7

辨析操作內層索引與外層索引的區別

代碼:

df2 = pd.DataFrame(np.arange(8).reshape(2, 4),columns=[['A', 'A', 'B', 'B'],['A0', 'A1', 'A0', 'A1']])
result1 = df2.stack()  # 操作內層索引
result2 = df2.stack(level=0)  # 操作外層索引
print("df2.stack():\n", result1)
print("df2.stack(level=0):\n", result2)

輸出結果:

df2.stack():A  B
0 A0  0  2A1  1  3
1 A0  4  6A1  5  7
df2.stack(level=0):A0  A1
0 A   0   1B   2   3
1 A   4   5B   6   7

查看多層索引對象轉換后的類型

代碼:

print("type(result1):\n", type(result1))
print("type(result2):\n", type(result2))

輸出結果:

type(result1):<class 'pandas.core.frame.DataFrame'>
type(result2):<class 'pandas.core.frame.DataFrame'>

對于多層索引來講,即使將外層行(列)索引或者內層行()列索引轉換為列(行)索引,也不過是多層變單層,只要行和列兩個方向仍然同時至少有單層索引存在,DataFrmae對象轉換后就仍為DataFrame對象。


軸向旋轉——pivot()方法

pivot()會根據給定的行索引或列索引重新組織一個DataFrame對象

pivot(self, index=None, columns=None, values=None)

上述方法中部分參數表示的含義如下:

  1. index:用于創建新DataFrame對象的行索引 。如果未設置,則使用原DataFrame對象的索引。
  2. columns:用于創建新DataFrame對象的列索引 。如果未設置,則使用原DataFrame對象的索引。
  3. values:用于填充新DataFrame對象中的值。

代碼:

df3 = pd.DataFrame({'A': ['A0', 'A0', 'A1', 'A1'],'B': ['B0', 'B1', 'B0', 'B1'],'C': ['C0', 'C1', 'C2', 'C3']})
print("df3:\n", df3)
print("df3.pivot(index='A', columns='B', values='C'):\n", 
df3.pivot(index='A', columns='B', values='C'))

輸出結果:

df3:A   B   C
0  A0  B0  C0
1  A0  B1  C1
2  A1  B0  C2
3  A1  B1  C3
df3.pivot(index='A', columns='B', values='C'):B   B0  B1
A         
A0  C0  C1
A1  C2  C3

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

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

相關文章

超硬核!學霸把操作系統經典算法給敲完了!要知行合一

上期的筆記&#xff0c;瀏覽快1萬了&#xff0c;既然關注的人很多&#xff0c;那就發出來承諾過的算法全模擬&#xff0c;希望幫到你們。 上期的操作系統學霸筆記&#xff0c;考試復習面試全靠它 一、模擬進程調度 功能 data.h #ifndef _Data_h_ #define _Data_h_#include …

Python之數據轉換——【rename()方法、cut()函數、get_dummies()函數】

文章目錄重命名軸索引離散化連續數據啞變量處理類別型數據重命名軸索引 rename( self, mapper: Optional[Renamer] None, *, index: Optional[Renamer] None, columns: Optional[Renamer] None, axis: Optional[Axis] None, copy: bool True, inplace: bool False, level…

超硬核!數據結構學霸筆記,考試面試吹牛就靠它

上次發操作系統筆記&#xff0c;很快瀏覽上萬&#xff0c;這次數據結構比上次硬核的多哦&#xff0c;同樣的會發超硬核代碼&#xff0c;關注吧。 超硬核&#xff01;操作系統學霸筆記&#xff0c;考試復習面試全靠它 第一次筆記&#xff08;復習c&#xff0c;課程概述&#xff…

Python之數據拆分——groupby()方法

文章目錄groupby()方法通過列名進行分組通過Series對象進行分組Series對象與原數據的行索引長度相等Series對象與原數據的行索引長度不等通過字典進行分組按照columns軸的方向進行分組按照index軸的方向進行分組通過函數進行分組groupby()方法 groupby( self, byNone, axis0, l…

超硬核!小白讀了這篇文章,就能在算法圈混了

作為一只超級硬核的兔子&#xff0c;從來不給你說廢話&#xff0c;只有最有用的干貨&#xff01;這些神級算法送給你 目錄 第一節 1.1bogo排序 1.2位運算 1.3打擂臺 1.4morris遍歷 第二節 2.1睡眠排序 2.2會死的兔子 2.3矩陣快速冪 2.4摔手機/摔雞蛋 時空復雜度目錄 …

Python之數據聚合——aggregate()方法

文章目錄使用內置統計方法聚合數據面向列的聚合方法aggregate()方法對每一列數據應用同一個函數對某列數據應用不同的函數對不同列數據應用不同函數使用內置統計方法聚合數據 實現數據拆分成組并分別計算平均數的操作 代碼&#xff1a; import pandas as pd import numpy as…

超硬核十萬字!全網最全 數據結構 代碼,隨便秒殺老師/面試官,我說的

本文代碼實現基本按照《數據結構》課本目錄順序&#xff0c;外加大量的復雜算法實現&#xff0c;一篇文章足夠。能換你一個收藏了吧&#xff1f; 當然如果落下什么了歡迎大家評論指出 目錄 順序存儲線性表實現 單鏈表不帶頭標準c語言實現 單鏈表不帶頭壓縮c語言實現 約瑟…

Python之分組級運算——【transform()方法、apply()方法】

文章目錄數據轉換——transform()方法數據應用——apply()方法數據轉換——transform()方法 使用aggregate()方法進行聚合運算已經在上一篇博客中詳細闡述&#xff0c;我們知道aggregate()方法返回的數據集的形狀&#xff08;shape&#xff09;與被分組的數據集的形狀是不同的…

java限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中&#xff0c;出于安全性考慮&#xff0c;經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是&#xff1a; 1、在同一臺電腦上一次只允許有一個用戶登錄系統&#xff1b; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Matplotlib——繪制圖表

文章目錄通過figure()函數創建畫布通過subplot()函數創建單個子圖通過subplots()函數創建多個子圖通過add_subplot()方法添加和選中子圖添加各類標簽繪制常見圖表繪制直方圖——hist()函數繪制散點圖——scatter()函數繪制柱狀圖——bar()函數設定線條的相關參數本地保存圖片通…

限制在同一臺電腦上只允許有一個用戶登錄系統

在web應用系統中&#xff0c;出于安全性考慮&#xff0c;經常需要對同一客戶端登錄的用戶數量和一個客戶同時在多個客戶端登陸進行限制。 具體一點就是&#xff1a; 1、在同一臺電腦上一次只允許有一個用戶登錄系統&#xff1b; 2、一個用戶在同一時間只允許在一個客戶端登錄…

Seaborn——繪制統計圖形

文章目錄可視化數據的分布繪制單變量分布繪制雙變量分布繪制成對的雙變量分布用分類數據繪圖類別散點圖通過stripplot()函數畫散點圖swarmplot()函數類別內的數據分布繪制箱型圖繪制提琴圖類別內的統計估計繪制條形圖繪制點圖可視化數據的分布 繪制單變量分布 一般采用最簡單…

Bokeh——交互式可視化庫

文章目錄前言如何通過Plotting繪制圖形前言 Bokeh是一個專門針對Web瀏覽器使用的交互式可視化庫&#xff0c;這是與其他可視化庫相比最核心的區別。 如何通過Plotting繪制圖形 Plotting是以構建視覺符號為核心的接口&#xff0c;可以結合各種視覺元素&#xff08;例如&#x…

指針、引用以及const限定符、constexpr限定符

文章目錄復合類型引用概念與使用引用的定義注意指針概念聲明方式取地址符指針值空指針利用指針訪問對象賦值和指針void* 指針指向指針的指針指向指針的引用初始化所有指針有多重含義的某些符號const限定符概念const的引用指針和const頂層const和底層constconstexpr和常量表達式…

關鍵字typedef、關鍵字using、auto類型說明符和declytpe類型指示符

文章目錄類型別名概念關鍵字 typedef別名聲明 (alias declaration) using指針、常量和類型別名類型別名簡化多維數組指針auto類型說明符概念復合類型、常量和autodecltype類型指示符概念decltype和引用類型別名 概念 有兩種方法可用于定義類型別名。 關鍵字 typedef typede…

初始化、賦值、默認初始化、列表初始化、類內初始值、直接初始化與拷貝初始化

文章目錄初始化和賦值的區別什么是默認初始化&#xff1f;列表初始化列表初始化的使用場景不適合使用列表初始化的場景類內初始值混用string對象和C風格字符串數組與vector對象關于vector對象兩者間的初始化關系直接初始化與拷貝初始化初始化和賦值的區別 初始化的含義是創建變…

js動態增加,刪除td,tr,table,div

js實現的動態添加&#xff0c;刪除table內容&#xff1a; 截圖如下&#xff1a; 1. 2. 源代碼&#xff1a; main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

string類的相關知識及部分操作

文章目錄string對象的初始化string::size_type類型string對象的讀寫操作使用標準庫中的iostream使用getline讀取一整行string對象的比較操作string對象的相加操作兩個string對象相加字面值和string對象相加string對象的初始化 拷貝初始化(copy initialization)&#xff1a;使用…

數組的部分練習

3.27&#xff1a;假設txt_size是一個無參數的函數&#xff0c;它的返回值是int。請回答下列哪個定義是非法的&#xff1f;為什么&#xff1f; unsigned buf_size1024; &#xff08;a&#xff09;int ia[buf_size];  &#xff08;b&#xff09;int ia[4*7-14]; &#xff08…

關于范圍for語句的使用

文章目錄使用范圍for語句處理多維數組使用范圍for語句處理多維數組 舉個例子&#xff0c;使用范圍for語句輸出多維數組&#xff08;ia&#xff09;所有值&#xff1a; for (const auto &row : ia)for (auto col : row)cout << col << endl;本循環中并沒有任何…