中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么創建一個pandas多層索引

發布時間:2021-03-09 15:27:37 來源:億速云 閱讀:303 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關怎么創建一個pandas多層索引,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

多層索引的創建

普通-多個index創建

  • 在創建數據的時候加入一個index列表,這個index列表里面是多個索引列表

Series多層索引的創建方法

import pandas as pd
s = pd.Series([1,2,3,4,5,6],index=[['張三','張三','李四','李四','王五','王五'],
                  ['期中','期末','期中','期末','期中','期末']])
# print(s)
s

張三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

利用 numpy中的隨機數

import numpy as np

data = np.random.randint(0,100,size=(6,3))
# np.random.randint(0,100,size=(6,3))是使用numpy中的隨機模塊random中,生成隨機整數方法randint,
# 里面的參數size是指定生成6行3列的數據,并且每個數字的范圍在0到100之間

data
array([[44, 66, 67],
    [82, 52, 0],
    [34, 78, 23],
    [38, 4, 43],
    [60, 62, 40],
    [57, 9, 11]])

Dataframe多層索引創建

import pandas as pd
import numpy as np

data = np.random.randint(0,100,size=(6,3))
df = pd.DataFrame(data,index=[['張三','張三','李四','李四','王五','王五'],
               ['期中','期末','期中','期末','期中','期末']],
           columns=['Java','Web','Python'])

df

JavaWebPython
張三期中68490
期末336373
李四期中301368
期末141848
王五期中346626
期末891035

簡化創建-from_product()

import pandas as pd
import numpy as np

data = np.random.randint(0,100,size=(6,3))
names = ['張三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
# print(df)
df

JavaWebPython
張三期中517847
期末395336
李四期中336083
期末90553
王五期中374566
期末68271

from_product()在這個里面的列表中位置不同, 產生的索引頁會不同

index = pd.MultiIndex.from_product([exam, names])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
# print(df)
df

JavaWebPython
期中張三517847
李四395336
王五336083
期末張三90553
李四374566
王五68271

from_product([exam,names])會將列表中第一個元素作為最外層索引,依次類推

多層索引的取值

獲取到我們想要的數據

獲取多層索引Series中的數據

創建數據

import pandas as pd
s = pd.Series([1,2,3,4,5,6],index=[['張三','張三','李四','李四','王五','王五'],
                  ['期中','期末','期中','期末','期中','期末']])
print(s)

張三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

可以直接使用[]的方式取最外面的一個層級 s[‘張三']

s['李四']

# 注意:[]取值方式,不可直接使用最外層以外的其他層級,例如:s['期末']

期中    3
期末    4
dtype: int64

使用['外索引', '內索引'], 獲取某個數據

注意:[‘張三',‘期末']他們的順序不能變。剝洋蔥原則,從外到內一層一層的剝。

s['李四', '期中'] # 李四期中分值

# 注意:['張三','期末']他們的順序不能變。剝洋蔥原則,從外到內一層一層的剝。

3

使用[]的切片,獲取數據s[:,‘期中']

s[:,'期中'] # 第一個值為全部的外索引

張三    1
李四    3
王五    5
dtype: int64

使用 loc

  • loc 使用的是標簽suoyin

  • iloc使用的是位置索引

# loc 使用方式與 [] 的方式基本一樣

s.loc['張三']
s.loc['張三','期中']
s.loc[:,'期中']

# iloc 的取值并不會受多層索引影響,只會根據數據的位置索引進行取值, 不推薦

張三    1
李四    3
王五    5
dtype: int64

多層索引DataFrame的取值

在對多層索引DataFrame的取值是,推薦使用 loc() 函數

import pandas as pd
import numpy as np
#size參數是指定生成6行3列的數組
data = np.random.randint(0,100,size=(6,3))
names = ['張三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
df

JavaWebPython
張三期中34052
期末743885
李四期中72816
期末9250
王五期中13248
期末49461

三種方式都可以獲取張三期中各科成績

# df.loc['張三','期中']
# df.loc['張三'].loc['期中']
# df.loc[('張三','期中')]

注意:DataFrame中對行索引的時候和Series有一個同樣的注意點,就是無法直接對二級索引直接進行索引,必須讓二級索引變成一級索引后才能對其進行索引

多層索引的排序

  • 使用sort_index() 排序

  • level參數可以指定是否按照指定的層級進行排列

  • 第一層索引值為0, 第二層索引的值為1

創建數據

import pandas as pd
data = np.random.randint(0,100,size=(9,3))
key1 = ['b','c','a']
key2 = [2,1,3]
index = pd.MultiIndex.from_product([key1,key2])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])

df


JavaWebPython
b2568281
1841655
3352586
c276176
1362894
3797097
a2251730
1383878
3417590

排序

  • DataFrame按行索引排序的方法是sort_index()

  • 如果直接使用的話,不傳參數, 會把每一層索引根據值進行升序排序

df.sort_index()

JavaWebPython
a1186074
2668727
3961864
b1725852
2223122
3311283
c165496
294718
331634
# 當level=0時,ascending=False, 會根據第一層索引值進行降序排序
df.sort_index(level=0,ascending=False)

JavaWebPython
c3797097
276176
1362894
b3352586
2568281
1841655
a3417590
2251730
1383878
# 當level=1時,會根據第二層索引值進行降序排序

df.sort_index(level=1,ascending=False)

# 數據會根據第二層索引值進行相應的降序排列,
# 如果索引值相同時會根據其他層索引值排列

JavaWebPython
c3797097
b3352586
a3417590
c276176
b2568281
a2251730
c1362894
b1841655
a1383878

通過level設置排序的索引層級,其他層索引也會根據其排序規則進行排序

關于怎么創建一個pandas多層索引就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰安市| 兰西县| 津南区| 亳州市| 竹山县| 沧源| 南宁市| 宜昌市| 静海县| 高要市| 常熟市| 玉树县| 九江县| 水城县| 喀喇沁旗| 浏阳市| 太白县| 临夏县| 新乡市| 许昌市| 阜南县| 新郑市| 佛山市| 万盛区| 娄底市| 鸡西市| 庆安县| 读书| 奎屯市| 永顺县| 黑河市| 中超| 南充市| 常山县| 柞水县| 泸溪县| 金平| 武夷山市| 蚌埠市| 赫章县| 根河市|