2013-10-29 59 views
3

我想追加一個水平提高到一個熊貓系列。說一個創建一個簡單的系列:追加一個級別的熊貓系列指數

series = pd.Series(range(10), index = list("ABCDEFGHIJ")) 

series有一個單一的索引級別。我想添加第二個關卡。有了DataFrame,你可以使用DataFrame.set_index來做到這一點乾淨。然而,如果沒有我的系列轉換成數據幀第一,我已經拿出最簡單的事情是這樣的東西:

index = [np.array(["L2" for x in series.index]), np.array(series.index)]  
series2 = pd.Series(series.tolist(), index = index) 

series2現在有兩個層面多指標。

有沒有更簡單更清潔的方法呢?

回答

3

不確定這是多麼清潔;有可用於構建分層索引的MultiIndex類:

>>> import pandas as pd 
>>> series = pd.Series(range(10), index = list("ABCDEFGHIJ")) 

創建一個新的對象,重用原來series指數:

>>> pd.Series(xrange(10), 
       pd.MultiIndex.from_tuples([('L2', a) for a in series.index])) 
L2 A 0 
    B 1 
    C 2 
    D 3 
    E 4 
    F 5 
    G 6 
    H 7 
    I 8 
    J 9 
dtype: int64 

,或可改變就地系列,以及:

>>> import pandas as pd 
>>> series = pd.Series(range(10), index = list("ABCDEFGHIJ")) 
>>> series.index = pd.MultiIndex.from_tuples([('L2', a) for a in series.index]) 

或只啓動一個MultiIndex乾脆:

>>> import pandas as pd 
>>> series = pd.Series(range(10), index=pd.MultiIndex.from_tuples(
             [('L2', x) for x in 'ABCDEFGHIJ'])) 
+0

謝謝@miku。這很有幫助。我通常不使用構造函數構造這些系列,或者最後的想法是最好的;它們是諸如value_counts()之類的輸出。 –

1

一個簡單的方法來做到這一點(就地)是:

series.index = pd.MultiIndex.from_product([['L2'], series.index])

編輯也有另一種方式做同樣的事情(不就地):

series2 = pd.concat([series], keys=['L2'])

+0

雖然這個鏈接可以回答這個問題,只鏈接答案是鼓勵對堆棧溢出,你可以通過鏈接的重要部分,並把它變成你的答案改善這個答案,這樣可以確保你的回答仍然是一個答案,如果鏈接獲得改變或刪除:) – WhatsThePoint