
- Python Pandas 教程
- Python Pandas - 首頁
- Python Pandas - 簡介
- Python Pandas - 環境設定
- Python Pandas - 基礎
- Python Pandas - 資料結構介紹
- Python Pandas - 索引物件
- Python Pandas - 面板
- Python Pandas - 基本功能
- Python Pandas - 索引和資料選擇
- Python Pandas - Series
- Python Pandas - Series
- Python Pandas - 切片 Series 物件
- Python Pandas - Series 物件的屬性
- Python Pandas - Series 物件的算術運算
- Python Pandas - 將 Series 轉換為其他物件
- Python Pandas - DataFrame
- Python Pandas - DataFrame
- Python Pandas - 訪問 DataFrame
- Python Pandas - 切片 DataFrame 物件
- Python Pandas - 修改 DataFrame
- Python Pandas - 從 DataFrame 中刪除行
- Python Pandas - DataFrame 的算術運算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 讀取和寫入 JSON 檔案
- Python Pandas - 從 Excel 檔案讀取資料
- Python Pandas - 將資料寫入 Excel 檔案
- Python Pandas - 使用 HTML 資料
- Python Pandas - 剪貼簿
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 與 SQL 的比較
- Python Pandas - 資料處理
- Python Pandas - 排序
- Python Pandas - 重新索引
- Python Pandas - 迭代
- Python Pandas - 連線
- Python Pandas - 統計函式
- Python Pandas - 描述性統計
- Python Pandas - 處理文字資料
- Python Pandas - 函式應用
- Python Pandas - 選項和自定義
- Python Pandas - 視窗函式
- Python Pandas - 聚合
- Python Pandas - 合併/連線
- Python Pandas - 多級索引
- Python Pandas - 多級索引基礎
- Python Pandas - 使用多級索引進行索引
- Python Pandas - 使用多級索引的高階重新索引
- Python Pandas - 重新命名多級索引標籤
- Python Pandas - 對多級索引進行排序
- Python Pandas - 二元運算
- Python Pandas - 二元比較運算
- Python Pandas - 布林索引
- Python Pandas - 布林掩碼
- Python Pandas - 資料重塑和透視
- Python Pandas - 透視
- Python Pandas - 堆疊和取消堆疊
- Python Pandas - 熔化
- Python Pandas - 計算虛擬變數
- Python Pandas - 類別資料
- Python Pandas - 類別資料
- Python Pandas - 類別資料的排序和排序
- Python Pandas - 比較類別資料
- Python Pandas - 處理缺失資料
- Python Pandas - 缺失資料
- Python Pandas - 填充缺失資料
- Python Pandas - 缺失值的插值
- Python Pandas - 刪除缺失資料
- Python Pandas - 使用缺失資料進行計算
- Python Pandas - 處理重複項
- Python Pandas - 重複資料
- Python Pandas - 計數和檢索唯一元素
- Python Pandas - 重複標籤
- Python Pandas - 分組和聚合
- Python Pandas - GroupBy
- Python Pandas - 時間序列資料
- Python Pandas - 日期功能
- Python Pandas - Timedelta
- Python Pandas - 稀疏資料結構
- Python Pandas - 稀疏資料
- Python Pandas - 視覺化
- Python Pandas - 視覺化
- Python Pandas - 其他概念
- Python Pandas - 警告和陷阱
- Python Pandas 有用資源
- Python Pandas - 快速指南
- Python Pandas - 有用資源
- Python Pandas - 討論
Python Pandas - 多級索引基礎
多級索引也稱為分層索引,它是 pandas 中一個強大的功能,允許您在低維結構(如 Series(一維)和 DataFrame(二維))中處理高維資料。使用多級索引,pandas 物件具有多個級別的索引標籤。使用多級索引,您可以表示和操作具有多個索引級別的資料,從而更容易有效地處理複雜的資料集。
在本教程中,我們將學習多級索引的基礎知識,包括如何建立具有多級索引的 Series 和 DataFrame,如何在多級索引軸上執行基本索引,以及如何使用多級索引對齊資料。
建立具有多級索引的 Pandas 物件
在 pandas 中建立多級索引物件有多種方法,包括從陣列列表、元組、可迭代物件的乘積或直接從 DataFrame 建立。
以下是構建新的多級索引的輔助方法列表:
MultiIndex.from_arrays()
MultiIndex.from_product()
MultiIndex.from_tuples()
MultiIndex.from_frame()
從陣列列表建立多級索引
透過使用pandas.MultiIndex.from_arrays()方法,我們可以從陣列列表建立多級索引。
示例:從列表列表建立具有多級索引的 Series
以下示例演示了使用pandas.MultiIndex.from_arrays()方法建立具有多級索引的 Series 物件。
import pandas as pd import numpy as np # Create a 2D list list_2d = [["BMW", "BMW", "Lexus", "Lexus", "foo", "foo", "Audi", "Audi"], ["1", "2", "1", "2", "1", "2", "1", "2"]] # Create a MultiIndex object index = pd.MultiIndex.from_arrays(list_2d, names=["first", "second"]) # Creating a MultiIndexed Series s = pd.Series(np.random.randn(8), index=index) # Display the output Series print("Output MultiIndexed Series:\n",s)
以下是上述程式碼的輸出:
Output MultiIndexed Series:
First | Second | |
---|---|---|
BMW | 1 | -1.334159 |
2 | -0.233286 | |
Lexus | 1 | 1.167558 |
2 | -0.875364 | |
foo | 1 | -0.338715 |
2 | 0.021517 | |
Audi | 1 | -0.272688 |
2 | 0.588359 |
從元組建立多級索引
Pandas MultiIndex.from_tuples()方法用於將元組列表轉換為多級索引。
示例:從元組建立具有多級索引的 DataFrame
此示例演示瞭如何使用pandas.MultiIndex.from_tuples()方法建立具有多級索引的 DataFrame 物件。
import pandas as pd import numpy as np # Create a 2D list list_2d = [["BMW", "BMW", "Lexus", "Lexus", "foo", "foo", "Audi", "Audi"], ["1", "2", "1", "2", "1", "2", "1", "2"]] # Create a MultiIndex object tuples = list(zip(*list_2d )) index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"]) # Creating a MultiIndexed DataFrame df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=["A", "B", "C", "D"]) # Display the output Series print("Output MultiIndexed DataFrame:\n", df)
以下是上述程式碼的輸出:
Output MultiIndexed DataFrame:
A | B | C | D | ||
---|---|---|---|---|---|
First | Second | ||||
BMW | 1 | -0.347846 | 1.011760 | -1.224244 | -1.225259 |
2 | 0.237115 | -1.316433 | 0.962960 | -1.008623 | |
Lexus | 1 | -1.806209 | 1.038973 | 0.246994 | -1.596616 |
2 | -0.325284 | -0.264822 | -0.735029 | 0.377645 | |
foo | 1 | 0.243560 | -0.408718 | 0.717466 | -1.446259 |
2 | -0.817704 | 0.711299 | 2.567860 | -1.054871 | |
Audi | 1 | 0.583519 | -0.007577 | 0.828928 | -0.826645 |
2 | 2.454626 | 1.558045 | 0.981507 | -0.148554 |
使用 from_product() 建立多級索引
Pandas MultiIndex.from_product()方法使用多個可迭代物件的笛卡爾積來建立多級索引。當您需要來自兩個或多個可迭代物件的每個可能的元素組合時,它非常有用。
示例:使用 from_product() 建立具有多級索引的 DataFrame
此示例演示瞭如何使用 pandas MultiIndex.from_product()方法建立具有多級索引的 DataFrame。
import pandas as pd import numpy as np # Create a list of lits iterable = [[1, 2, 3], ['green', 'black']] # Create a MultiIndex object index = pd.MultiIndex.from_product(iterable, names=["number", "color"]) # Creating a MultiIndexed DataFrame df = pd.DataFrame(np.random.randn(6, 3), index=index, columns=["A", "B", "C"]) # Display the output Series print("Output MultiIndexed DataFrame:\n", df)
以下是上述程式碼的輸出:
Output MultiIndexed DataFrame:
A | B | C | ||
---|---|---|---|---|
Number | Color | |||
1 | green | -1.174910 | -0.861695 | -0.026601 |
black | -2.824289 | 0.674870 | 1.132675 | |
2 | green | -0.285381 | -0.104188 | 1.993371 |
black | -0.926109 | -0.579404 | -1.119692 | |
3 | green | -3.278989 | -0.873407 | -1.359360 |
black | 0.735492 | 0.066735 | -0.099568 |
從 DataFrame 建立多級索引
Pandas MultiIndex.from_frame()方法用於從 DataFrame 建立多級索引。
示例:從 DataFrame 建立多級索引
此示例使用pd.MultiIndex.from_frame()方法直接從 DataFrame 建立多級索引物件。
import pandas as pd import numpy as np # Create a DataFrame df = pd.DataFrame([["BMW", 1], ["BMW", 2], ["Lexus", 1],["Lexus", 2]], columns=["first", "second"]) # Create a MultiIndex object index = pd.MultiIndex.from_frame(df) # Creating a MultiIndexed DataFrame df = pd.DataFrame(np.random.randn(4, 3), index=index, columns=["A", "B", "C"]) # Display the output Series print("Output MultiIndexed DataFrame:\n", df)
以下是上述程式碼的輸出:
Output MultiIndexed DataFrame:
A | B | C | ||
---|---|---|---|---|
First | Second | |||
BMW | 1 | -0.662779 | -0.270775 | 0.129462 |
2 | -0.251308 | 1.920896 | 0.756204 | |
Lexus | 1 | -0.466133 | 0.590872 | 0.252439 |
2 | -1.226775 | -0.239043 | -0.023214 |
具有多級索引的軸的基本索引
使用多級索引進行索引用於以比常規索引更靈活的方式切片和選擇資料。
示例:按索引級別選擇資料
這是一個基本示例,演示瞭如何使用.loc[]方法索引具有多級索引的 Series 物件。
import pandas as pd import numpy as np # Creating MultiIndex from arrays arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"], ["one", "two", "one", "two", "one", "two", "one", "two"]] # Creating a list of tuples from the arrays tuples = list(zip(*arrays)) # Creating a MultiIndex from tuples index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"]) # Creating a Series with MultiIndex s = pd.Series([2, 3, 1, 4, 6, 1, 7, 8], index=index) print("MultiIndexed Series:\n", s) # Indexing the MultiIndexed Series using .loc[] print("\nSelecting data at index ('bar', 'one') and column 'A':") print(s.loc[('bar', 'one')])
以下是上述程式碼的輸出:
MultiIndexed Series:
First | Second | |
---|---|---|
bar | one | 2 |
two | 2 | |
one | 1 | 1 |
two | 4 | |
one | 1 | 6 |
two | 1 | |
one | 1 | 7 |
two | 8 |