Python3 pandas.MultiIndex類詳解 及swaplevel sortlevel的使用

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章