Python3 pandas.MultiIndex
層次化索引(hierarchical indexing)在一個軸上擁有多個(兩個以上)索引級別,使用戶能以低維度形式處理高維度數據。
參數
levels:每個等級上軸標籤的唯一值
labels:以整數來表示每個level上標籤的位置
sortorder:按照指定level上的標籤名稱的字典順序進行排序(可選參數)
names:index level的名稱
copy:布爾值,默認爲False。是否拷貝元數據產生新的對象
verify_integrity:布爾值,默認爲Ture。檢查levels/labels是否持續有效
In [1]:
data = Series(np.random.randn(10),
index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
data
Out [1]:
a 1 -0.204708
2 0.478943
3 -0.519439
b 1 -0.555730
2 1.965781
3 1.393406
c 1 0.092908
2 0.281746
d 2 0.769023
3 1.246435
dtype: float64
In [2]:
data.index
Out [2]:
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],
labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])
- level中的唯一標籤值集合分別爲[‘a’, ‘b’, ‘c’, ‘d’]和[1, 2, 3]。
- data.index.levels[0]上的標籤abcd對應的索引爲0123。data.index.levels[1]上的標籤123對應的索引爲012。
- 外層level的label值[0, 0, 0, 1, 1, 1, 2, 2, 3, 3]表示對應的標籤值分別出現幾次:a和b爲3次,c和d爲2次
- 內層level的label值[0, 1, 2, 0, 1, 2, 0, 1, 1, 2]按個數與外層label相對應。例如:外層a出現3次,則內層label的前3個值與a相對應,這三個索引值爲0,1,2,分別對應1,2,3。
df.swaplevel
DataFrame.swaplevel(i=-2, j=-1, axis=0)
返回互換了級別i和j的新對象,不改變原數據
In [3]:
frame = DataFrame(np.arange(12).reshape((4, 3)),
index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
columns=[['Ohio', 'Ohio', 'Colorado'],
['Green', 'Red', 'Green']])
frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color']
frame
Out [3]:
state Ohio Colorado
color Green Red Green
key1 key2
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11
In [4]:
frame.swaplevel('key1', 'key2')
Out [4]:
state Ohio Colorado
color Green Red Green
key2 key1
1 a 0 1 2
2 a 3 4 5
1 b 6 7 8
2 b 9 10 11
df.sortlevel
DataFrame.sortlevel(level=0, axis=0, ascending=True, inplace=False, sort_remaining=True)
按字典順序在level中排序,即相同標籤內部進行排序。
In [5]:
frame.sortlevel(1)
Out [5]:
state Ohio Colorado
color Green Red Green
key1 key2
a 1 0 1 2
b 1 6 7 8
a 2 3 4 5
b 2 9 10 11