1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
這只是為多索引數(shù)據(jù)幀的初學(xué)者分享一個(gè)非?;镜母拍?。
“空”項(xiàng)是多索引視圖的一部分,僅在您輸出 df 時(shí)出現(xiàn),它有助于您理解層次結(jié)構(gòu)。如果您輸出隔離的 Multiindex 類(lèi),則沒(méi)有項(xiàng)目是空的。因此,索引項(xiàng)永遠(yuǎn)不會(huì)真正為空,并且“空”字段僅出現(xiàn)在 df 輸出中:
如果“A_idx”索引被分配給多個(gè)“B_idx”索引值,則“A_idx”索引不會(huì)重復(fù),因?yàn)樗?parent。
如果“A_idx”索引指向多個(gè)值行,而“B_idx”索引正在重復(fù),B_idx仍然重復(fù),因?yàn)樗?child。
如果您使用df.head(10)
并發(fā)現(xiàn)“空”索引項(xiàng)在第 1 行,您也可以在 df 中使用 快速檢查df.iloc[1].reset_index()
。您會(huì)看到索引項(xiàng)不為空。
在下文中,“first”和“second”是索引名稱(chēng),因?yàn)樗鼈冊(cè)谕惠敵鲂猩?,所以看起?lái)具有同等的父級(jí)權(quán)利,但實(shí)際上層次結(jié)構(gòu)是從左到右的。
first second
bar one 0.289163 -0.464633 -0.060487
two 0.224442 0.177609 2.156436
baz one -0.262329 -0.248384 0.925580
foo one 0.051350 0.452014 0.206809
two 2.757255 -0.739196 0.183735
three -0.064909 -0.963130 1.364771
qux one -1.330857 1.881588 -0.262170
感謝您提供示例,請(qǐng)轉(zhuǎn)到Access last elements of inner multiindex level in pandas dataframe。
這實(shí)際上意味著:
first second
bar one 0.289163 -0.464633 -0.060487
bar two 0.224442 0.177609 2.156436
baz one -0.262329 -0.248384 0.925580
foo one 0.051350 0.452014 0.206809
foo two 2.757255 -0.739196 0.183735
foo three -0.064909 -0.963130 1.364771
qux one -1.330857 1.881588 -0.262170
####
如何相應(yīng)地創(chuàng)建層次結(jié)構(gòu)的示例。
傳遞給 set_index() 的列列表的順序以相同的順序創(chuàng)建層次結(jié)構(gòu)。
您可以在我從pandas multiindex reindex by rows借用的一個(gè)小示例中查看這一點(diǎn),其中 df2 覆蓋了兩個(gè)索引的切換。只有 df 顯示秘密“空項(xiàng)目”,請(qǐng)參閱df與df2輸出:
df = pd.DataFrame({'month': [1, 4, 7, 10],
'year': [2012, 2012, 2013, 2013],
'sale': [55, 40, 84, 31]})
df2 = df.copy()
df=df.set_index(['year','month'])
df2=df2.set_index(['month','year'])
df:
sale
year month
2012 1 55
4 40
2013 7 84
10 31
df2:
month year sale
0 1 2012 55
1 4 2012 40
2 7 2013 84
3 10 2013 31
df.index
輸出:
MultiIndex([(2012, 1),
(2012, 4),
(2013, 7),
(2013, 10)],
names=['year', 'month'])
或者:
df2.index
輸出:
MultiIndex([( 1, 2012),
( 4, 2012),
( 7, 2013),
(10, 2013)],
names=['month', 'year'])
看看 df 中的級(jí)別:
df.index.levels[0]
Int64Index([2012, 2013], dtype='int64', name='year')
df.index.levels[1]
Int64Index([1, 4, 7, 10], dtype='int64', name='月')
df2.index.levels[0]
Int64Index([1, 4, 7, 10], dtype='int64', name='月')
df2.index.levels[1]
Int64Index([2012, 2013], dtype='int64', name='year')
如果要檢查或闡明輸出視圖中層次結(jié)構(gòu)的不同級(jí)別,請(qǐng)選擇一行并重置索引:
df.iloc[1].reset_index()
輸出:
index 2012
4
0 sale 40
或者:
df2.iloc[1].reset_index()
輸出:
index 4
2012
0 sale 40
添加回答
舉報(bào)