日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 層次化索引的概念
  • 層次化索引的創建
    • 使用嵌套列表的方式構造層次化索引對象
      • Series對象
      • DataFrame對象
    • 通過MultiIndex類的方法構建層次化索引
      • 通過from_tuples()方法創建MultiIndex對象
      • 通過from_arrays()方法創建MultiIndex對象
      • 通過from_product()方法創建MultiIndex對象
  • 層次化索引的操作
    • 選取子集
      • 獲取外層索引子集
      • 獲取內層索引子集
    • 交換分層順序——swaplevel()
    • 排序分層
      • sort_index()
      • sort_values()


層次化索引的概念

只有一層索引結構(行索引、列索引)的Pandas對象稱為單層索引層次化索引可以理解為單層索引的延申,即在一個軸方向上具有多層索引


層次化索引的創建

使用嵌套列表的方式構造層次化索引對象

Series對象

使用構造方法創造Series對象時,index參數接收了一個嵌套列表來設置索引的層級。

嵌套的第一個列表會作為外層索引第二個列表會作為內層索引

import pandas as pd import numpy as npse = pd.Series([1, 2, 3, 4, 5, 6, 7, 8],index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家莊', '唐山', '邯鄲', '秦皇島', '鄭州', '開封', '洛陽', '新鄉']]) print(se)

輸出結果:

河北省 石家莊 1唐山 2邯鄲 3秦皇島 4 河南省 鄭州 5開封 6洛陽 7新鄉 8 dtype: int64

DataFrame對象

嵌套函數中兩個列表的長度必須是保持一致的,否則將會出現ValueError錯誤。

df = DataFrame([1, 2, 3, 4, 5, 6, 7, 8],index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家莊', '唐山', '邯鄲', '秦皇島', '鄭州', '開封', '洛陽', '新鄉']],columns=['占地面積']) print(df) df1 = DataFrame({'占地面積': [1, 2, 3, 4, 5, 6, 7, 8]},index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家莊', '唐山', '邯鄲', '秦皇島', '鄭州', '開封', '洛陽', '新鄉']]) print(df1)

輸出結果: 兩種方式的輸出結果是一致的

占地面積 河北省 石家莊 1唐山 2邯鄲 3秦皇島 4 河南省 鄭州 5開封 6洛陽 7新鄉 8占地面積 河北省 石家莊 1唐山 2邯鄲 3秦皇島 4 河南省 鄭州 5開封 6洛陽 7新鄉 8

通過MultiIndex類的方法構建層次化索引

除了使用嵌套列表的方式構造層次化索引以外,還可以通過MultiIndex類的方法構建一個層次化索引。


MultiIndex類提供了3種創建層次化索引的方法。

MultiIndex.from_tuples():將元組列表轉換為MultiIndex。

MultiIndex.from_arrays():將數組列表轉換為MultiIndex。

MultiIndex.from_product():從多個集合的笛卡爾乘積種創建一個MultiIndex。


MultiIndex類對象種有三個比較重要的屬性

levels : 表示每個級別的唯一標簽

labels : 表示每一個索引列種每個元素在levels中對應的第幾個元素

names :設置索引等級名稱


通過from_tuples()方法創建MultiIndex對象

from_tuples()方法可以將包含若干個元組的列表轉換為MultiIndex對象,其中元組的第一個元素作為外層索引,元組的第二個元素作為內層索引

from pandas import MultiIndexlist_tuples = [('A', 'A1'), ('A', 'A2'), ('A', 'A3'), ('B', 'B1'), ('B', 'B2')] # 創建包含多個元組的列表 multi_tuple = MultiIndex.from_tuples(tuples=list_tuples, names=['外層索引', '內層索引']) # 根據元組列表創建一個MultiIndex對象 print(multi_tuple)

輸出結果:

MultiIndex([('A', 'A1'),('A', 'A2'),('A', 'A3'),('B', 'B1'),('B', 'B2')],names=['外層索引', '內層索引'])

接下來,創建一個DataFrame對象,把剛創建的創建的multi_tuple傳遞給index參數

import pandas as pdvalue = [[1, 2, 3], [8, 5, 7], [4, 7, 7], [5, 5, 4], [4, 9, 9]] df_tuple = pd.DataFrame(data=value, index=multi_tuple) print(df_tuple)

輸出結果:

外層索引 內層索引 A A1 1 2 3A2 8 5 7A3 4 7 7 B B1 5 5 4B2 4 9 9

通過from_arrays()方法創建MultiIndex對象

from_arrays()方法是將數組列表轉換為MultiIndex對象,其中嵌套的第一個列表將作為外層索引,嵌套的第二個列表將作為內層索引

from pandas import MultiIndexmulti_array = MultiIndex.from_arrays(arrays=[['A', 'B', 'A', 'B', 'B'],['A1', 'A2', 'B1', 'B2', 'B3']],names=['外層索引', '內層索引']) # 根據列表創建一個MultiIndex對象 print(multi_array)

輸出結果:

MultiIndex([('A', 'A1'),('B', 'A2'),('A', 'B1'),('B', 'B2'),('B', 'B3')],names=['外層索引', '內層索引'])

參數arrays既可以接收列表,也可以接受數組,不過每個列表或者數組的長度必須是相同的

接下來,創建一個DataFrame對象,把剛剛創建的multi_array傳遞給index參數。

import pandas as pd import numpy as npvalue1 = np.arange(10).reshape(5, 2) df_array = pd.DataFrame(data=value1, index=multi_array) print(df_array)

輸出結果:

0 1 外層索引 內層索引 A A1 0 1 B A2 2 3 A B1 4 5 B B2 6 7B3 8 9

通過from_product()方法創建MultiIndex對象

from_product()方法表示從多個集合的笛卡爾積中創建一個MultiIndex對象。

number = [0, 1, 2] colors = ['green', 'purple'] multi_product = pd.MultiIndex.from_product(iterables=[number, colors],names=['number', 'color']) print(multi_product)

輸出結果:

MultiIndex([(0, 'green'),(0, 'purple'),(1, 'green'),(1, 'purple'),(2, 'green'),(2, 'purple')],names=['number', 'color'])

接下來,創建一個DataFrame對象,把剛剛創建的multi_product傳遞給index參數,讓該對象有兩層索引結構。

value2 = np.arange(12).reshape(6, 2) df_product = pd.DataFrame(data=value2, index=multi_product) print(df_product)

輸出結果:

0 1 number color 0 green 0 1purple 2 3 1 green 4 5purple 6 7 2 green 8 9purple 10 11

層次化索引的操作

選取子集

創建Series對象

ser_obj = Series([50, 60, 40, 94, 63, 101, 200, 56, 45],index=[['小說', '小說', '小說','散文隨筆', '散文隨筆', '散文隨筆','傳記', '傳記', '傳記'],['高山上的小郵局', '失蹤的總統', '綠毛水怪','皮囊', '浮生六記', '自在獨行','梅西', '老舍自傳', '庫里傳']]) print(ser_obj)

輸出結果:

小說 高山上的小郵局 50失蹤的總統 60綠毛水怪 40 散文隨筆 皮囊 94浮生六記 63自在獨行 101 傳記 梅西 200老舍自傳 56庫里傳 45 dtype: int64

獲取外層索引子集

例如獲取所有外層索引為“小說”的子集

print(ser_obj['小說'])

輸出結果:

高山上的小郵局 50 失蹤的總統 60 綠毛水怪 40 dtype: int64

獲取內層索引子集

例如獲取內層索引為“老舍自傳”的子集

print(ser_obj[:, '老舍自傳'])

輸出結果:

傳記 56 dtype: int64

交換分層順序——swaplevel()

交換分層順序是指交換外層索引和內層索引的位置。

print(ser_obj.swaplevel())

輸出結果:

高山上的小郵局 小說 50 失蹤的總統 小說 60 綠毛水怪 小說 40 皮囊 散文隨筆 94 浮生六記 散文隨筆 63 自在獨行 散文隨筆 101 梅西 傳記 200 老舍自傳 傳記 56 庫里傳 傳記 45 dtype: int64

排序分層

sort_index()

sort_index(
self,
axis=0,
level=None,
ascending=True,
inplace=False,
kind=“quicksort”,
na_position=“last”,
sort_remaining=True,
ignore_index: bool = False,
)

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

ascending: 是否升序排列,默認為True,升序排列。

在使用sort_index()方法排序時,會優先選擇按外層索引進行排序,然后再按照內層索引進行排序。


創建一個DataFrame對象

df_obj = DataFrame({'word': ['a', 'b', 'd', 'e', 'f', 'k', 'd', 's', 'l'],'num':['1', '2', '4', '5', '3', '2', '6', '2', '3']},index=[['A', 'A', 'A', 'C', 'C', 'C', 'B', 'B', 'B'],[1, 3, 2, 3, 1, 2, 4, 5, 8]]) print(df_obj)

輸出結果:

word num A 1 a 13 b 22 d 4 C 3 e 51 f 32 k 2 B 4 d 65 s 28 l 3

按索引排序

print(df_obj.sort_index())

輸出結果:

word num A 1 a 12 d 43 b 2 B 4 d 65 s 28 l 3 C 1 f 32 k 23 e 5

sort_values()

sort_values(
self,
by,
axis=0,
ascending=True,
inplace=False,
kind=“quicksort”,
na_position=“last”,
ignore_index=False,
)

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

by: 按指定的值排序,是sort_values()必須填寫的參數


按照列索引num進行降序排列

print(df_obj.sort_values(by=['num'], ascending=False))

輸出結果:

word num B 4 d 6 C 3 e 5 A 2 d 4 C 1 f 3 B 8 l 3 A 3 b 2 C 2 k 2 B 5 s 2 A 1 a 1

總結

以上是生活随笔為你收集整理的Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。