五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動(dòng)態(tài)

Pandas的MultiIndex多層索引使用說(shuō)明

發(fā)布日期:2022-01-02 15:39 | 文章來(lái)源:源碼中國(guó)

MultiIndex多層索引

MultiIndex,即具有多個(gè)層次的索引,有些類(lèi)似于根據(jù)索引進(jìn)行分組的形式。通過(guò)多層次索引,我們就可以使用高層次的索引,來(lái)操作整個(gè)索引組的數(shù)據(jù)。通過(guò)給索引分類(lèi)分組,則可以操作組數(shù)據(jù)。

1.創(chuàng)建方式

1.1.第一種:多維數(shù)組

我們?cè)趧?chuàng)建Series或DataFrame時(shí),可以通過(guò)給index(columns)參數(shù)傳遞多維數(shù)組,進(jìn)而構(gòu)建多維索引。

【數(shù)組中每個(gè)維度對(duì)應(yīng)位置的元素,組成每個(gè)索引值】

多維索引也可以設(shè)置名稱(chēng)(name性),屬性的值為一維數(shù)組,元素的個(gè)數(shù)需要與索引的層數(shù)相同(每層索引都需要具有一個(gè)名稱(chēng))。

1.2.第二種:MultiIndex

我們可以通過(guò)MultiIndex類(lèi)的相關(guān)方法,預(yù)先創(chuàng)建一個(gè)MultiIndex對(duì)象,然后作為Series與DataFrame中的index(或columns)參數(shù)值。同時(shí),可以通過(guò)names參數(shù)指定多層索引的名稱(chēng)。

  • from_arrays:接收一個(gè)多維數(shù)組參數(shù),高維指定高層索引,低維指定底層索引。
  • from_tuples:接收一個(gè)元組的列表,每個(gè)元組指定每個(gè)索引(高維索引,低維索引)。
  • from_product:接收一個(gè)可迭代對(duì)象的列表,根據(jù)多個(gè)可迭代對(duì)象元素的笛卡爾積進(jìn)行創(chuàng)建索引。

from_product相對(duì)于前兩個(gè)方法而言,實(shí)現(xiàn)相對(duì)簡(jiǎn)單,但是,也存在局限。

1.3.創(chuàng)建案例:

import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
#通過(guò)給index(columns)參數(shù)傳遞多維數(shù)組,進(jìn)而構(gòu)建多維索引
# 多層索引,指定一個(gè)多維數(shù)組。多維數(shù)組中,逐級(jí)給出每層索引的值。
s = pd.Series([1, 2, 3, 4], index=[["A", "A", "B", "B"], ["a", "b", "c", "d"]])
# 多于多層索引,每一層都具有一個(gè)名字。
s.index.names = ["index1", "index2"]
display(s)
display(s.loc["A"].loc["a"])

df=pd.DataFrame(np.arange(9).reshape(3, 3), columns=[["X", "X", "Y"], ["x1", 'x2', 'y1']],index=[["A", "B", "B"], ["a", 'a', 'b']])
display(df)
display(df.loc["B"]) 
display(df["X"])
display(df.loc["B"].loc["a"]["X"]["x1"])

#通過(guò)MultiIndex類(lèi)的方法進(jìn)行創(chuàng)建。
# 通過(guò)列表的方式進(jìn)行創(chuàng)建。(每個(gè)內(nèi)嵌列表元素指定層次的索引,[[第0層索引], [第1層索引],……[第n層索引]])
array1=pd.MultiIndex.from_arrays([["A","A","B"],["a","b","a"]])
df=pd.DataFrame(np.random.rand(3,3),index=array1)
display(df)
# 通過(guò)元組構(gòu)成列表的方式進(jìn)行創(chuàng)建。[(高層,底層), (高層, 底層), ……]
tuple1 = pd.MultiIndex.from_tuples([("A", "a"), ("A", "b"), ("B", "a")])
df2 = pd.DataFrame(np.random.random((3, 3)), index=tuple1)
display(df2)
# 通過(guò)乘積(笛卡爾積)的方式進(jìn)行創(chuàng)建。
product1 = pd.MultiIndex.from_product([["A", "B"], ["a", "b"]])
df3 = pd.DataFrame(np.random.random((4, 3)), index=product1)
display(df3)

2.多層索引操作

對(duì)于多層索引,同樣也支持單層索引的相關(guān)操作,例如,索引元素,切片,索引數(shù)組選擇元素等。我們也可以根據(jù)多級(jí)索引,按層次逐級(jí)選擇元素。

多層索引的優(yōu)勢(shì):通過(guò)創(chuàng)建多層索引,我們就可以使用高層次的索引,來(lái)操作整個(gè)索引組的數(shù)據(jù)。格式:

  • s[操作]
  • s.loc[操作]
  • s.iloc[操作]

其中,操作可以是索引,切片,數(shù)組索引,布爾索引。

2.1.Series多層索引

  • 通過(guò)loc(標(biāo)簽索引)操作,可以通過(guò)多層索引,獲取該索引所對(duì)應(yīng)的一組值。
  • 通過(guò)iloc(位置索引)操作,會(huì)獲取對(duì)應(yīng)位置的元素值(與是否多層索引無(wú)關(guān))。
  • 通過(guò)s[操作]的行為有些詭異,建議不用。
    • 對(duì)于索引(單級(jí)),首先按照標(biāo)簽選擇,如果標(biāo)簽不存在,則按照位置選擇。
    • 對(duì)于多級(jí)索引,則按照標(biāo)簽進(jìn)行選擇。
    • 對(duì)于切片,如果提供的是整數(shù),則按照位置選擇,否則按照標(biāo)簽選擇。
    • 對(duì)于數(shù)組索引, 如果數(shù)組元素都是整數(shù),則根據(jù)位置進(jìn)行索引,否則,根據(jù)標(biāo)簽進(jìn)行索引。

2.2.DataFrame多層索引

  • 通過(guò)loc(標(biāo)簽索引)操作,可以通過(guò)多層索引,獲取該索引所對(duì)應(yīng)的一組值。
  • 通過(guò)iloc(位置索引)操作,會(huì)獲取對(duì)應(yīng)位置的一行(與是否多層索引無(wú)關(guān))。
  • 通過(guò)s[操作]的行為有些詭異,建議不用。
    • 對(duì)于索引,根據(jù)標(biāo)簽獲取相應(yīng)的列(如果是多層索引,則可以獲得多列)。
    • 對(duì)于數(shù)組索引, 根據(jù)標(biāo)簽,獲取相應(yīng)的列(如果是多層索引,則可以獲得多列)。
    • 對(duì)于切片,首先按照標(biāo)簽進(jìn)行索引,然后再按照位置進(jìn)行索引(取行)。

2.3.交換索引

df.swaplevel(i=-2, j=-1, axis=0)

我們可以調(diào)用DataFrame對(duì)象的swaplevel方法來(lái)交換兩個(gè)層級(jí)索引。該方法默認(rèn)對(duì)倒數(shù)第2層與倒數(shù)第1層進(jìn)行交換。我們也可以指定交換的層。層次從0開(kāi)始,由外向內(nèi)遞增(或者由上到下遞增),也可以指定負(fù)值,負(fù)值表示倒數(shù)第n層。除此之外,我們也可以使用層次索引的名稱(chēng)來(lái)進(jìn)行交換。

df = pd.DataFrame(np.random.rand(4, 4), index=[["A", "A", "B", "B"], ["a1", "a1", "b1", "c1"], ["a2", "b2", "c2", "c2"]])
df.index.names = ["layer1", "layer2", "layer3"]
display(df)
# 多層索引,編號(hào)從外向內(nèi),0, 1, 2, 3.同時(shí),索引編號(hào)也支持負(fù)值。
# 負(fù)值表示從內(nèi)向外,-1, -2, -3. -1表示最內(nèi)層。
display(df.swaplevel())  #默認(rèn)對(duì)倒數(shù)第2層與倒數(shù)第1層進(jìn)行交換
display(df.swaplevel(0, 2))
# 交換多層索引時(shí),我們除了可以指定層次的編號(hào)外,也可以指定索引層次的名稱(chēng)。
display(df.swaplevel("layer1", "layer3"))

2.4.索引排序

我們可以使用sort_index方法對(duì)索引進(jìn)行排序處理。

Signature: df.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
  • level:指定根據(jù)哪一層進(jìn)行排序,默認(rèn)為最外(上)層。該值可以是數(shù)值,索引名,或者是由二者構(gòu)成的列表。
  • inplace:是否就地修改。默認(rèn)為False。
display(df.sort_index())  #默認(rèn)索引排序
# 自定義排序的層次。
display(df.sort_index(level=1))
display(df.sort_index(level=2))
# 也可以通過(guò)索引的名稱(chēng)進(jìn)行排序。
display(df.sort_index(level="layer1"))
display(df.sort_index(level="layer2"))

2.5.索引堆疊

通過(guò)DataFrame對(duì)象的stack方法,可以進(jìn)行索引堆疊,即將指定層級(jí)的列轉(zhuǎn)換成行。

  • level:指定轉(zhuǎn)換的層級(jí),默認(rèn)為-1。
# 進(jìn)行堆疊  列->行取消堆疊行->列
df.stack()df.unstack()

2.6.取消堆疊

通過(guò)DataFrame對(duì)象的unstack方法,可以取消索引堆疊,即將指定層級(jí)的行轉(zhuǎn)換成列。 level:指定轉(zhuǎn)換的層級(jí),默認(rèn)為-1。 fill_value:指定填充值。默認(rèn)為NaN。

df = pd.DataFrame(np.random.rand(4, 4), index=[["A", "B", "B", "A"], ["b", "b", "a", "c"], ["b2", "c2", "a2", "c2"]])
df.index.names = ["layer1", "layer2", "layer3"]
display(df)

# 取消堆疊,如果沒(méi)有匹配的數(shù)據(jù),則顯示空值NaN。
display(df.unstack())

# 我們可以指定值去填充N(xiāo)aN(空值)。
df.unstack(fill_value=11)

# unstack默認(rèn)會(huì)將最內(nèi)層取消堆疊,我們也可以自行來(lái)指定層次。
display(df.unstack(0))

# 進(jìn)行堆疊  列->行取消堆疊行->列
df.stack()  # df.unstack()
# stack堆疊也可以指定層次。
# stack堆疊也可以通過(guò)索引名進(jìn)行操作。
df.stack(0)

2.7.設(shè)置索引

在DataFrame中,如果我們需要將現(xiàn)有的某一(幾)列作為索引列,可以調(diào)用set_index方法來(lái)實(shí)現(xiàn)。

  • Signature: df.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
  • drop:是否丟棄作為新索引的列,默認(rèn)為T(mén)rue。
  • append:是否以追加的方式設(shè)置索引,默認(rèn)為False。
  • inplace:是否就地修改,默認(rèn)為False。
df = pd.DataFrame({"pk":[1, 2, 3, 4], "age":[15, 20, 17, 8], "name":["n1", "n2", "n3", "n4"]})
display(df)
df1 = df.set_index("pk", drop=False)
display(df1)

2.8.重置索引

調(diào)用在DataFrame對(duì)象的reset_index,可以重置索引。該操作與set_index正好相反。

  • Signature: df.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
  • level:重置索引的層級(jí),默認(rèn)重置所有層級(jí)的索引。如果重置所有索引,將會(huì)創(chuàng)建默認(rèn)整數(shù)序列索引。
  • drop:是否丟棄重置的索引列,默認(rèn)為False。
  • inplace:是否就地修改,默認(rèn)為False。
df = pd.DataFrame({"pk":[1, 2, 3, 4], "age":[15, 20, 17, 8], "name":["n1", "n2", "n3", "n4"]})
#display(df)
df1 = df.set_index("pk", drop=False)
#display(df1)
df2 = df1.reset_index(0, drop=True)
display(df2)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持本站。

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部