2013-11-20 126 views
6

我有一個時間序列數據框,我想通過試驗和測量重新索引它。熊貓重建索引dataframe multiindex

,簡體中文,我有這樣的:

   value 
Trial   
    1  0  13 
      1   3 
      2   4 
    2  3  NaN 
      4  12 
    3  5  34 

,我想變成這樣:

    value 
Trial  
    1  0  13 
      1   3 
      2   4 
    2  0  NaN 
      1  12 
    3  0  34 

我怎樣才能最好做到這一點?

回答

7

就在昨天,傑出的安迪海登把這個功能加入了0.13版本的熊貓,它將在任何一天發佈。有關他添加到文檔中的使用示例,請參見here

如果您願意從源代碼安裝熊貓開發版本,現在就可以使用它。

df['Measurements'] = df.reset_index().groupby('Trial').cumcount() 

下面的代碼是等價的,如果少了精闢的,任何新版本的熊貓會工作。

grouped = df.reset_index().groupby('Trial') 
df['Measurements'] = grouped.apply(lambda x: Series(np.arange(len(x)), x.index)) 

終於,df.set_index(['Trial', 'Measurements'], inplace=True)得到您想要的結果。

+4

哈哈! 「illustrious」+1;)(注:cumcount也適用於指數中的愚蠢行爲,但「等價」不......我在文檔中有點厚臉皮,並說「*本質上*等價」:p) –

+0

如果我的索引不叫('測量') - 而是根本沒有名字? – TheChymera

+1

未命名的索引級別可以使用''level''關鍵字指定,例如'groupby(level = 1)''。 –