2016-11-04 61 views
1

現在我有一個數據幀(DF)衛生組織結構可以通過做被複制:添加類別的大熊貓多指標數據幀的水平

d = {('Control', 0, 'mean'): {'Field 1': 1.0}, 
    ('Control', 0, 'stErr'): {'Field 1': 0.0}, 
    ('Control', 0, 'stdev'): {'Field 1': 0.0}, 
    ('Control', 48, 'mean'): {'Field 1': 1.08}, 
    ('Control', 48, 'stErr'): {'Field 1': 0.01}, 
    ('Control', 48, 'stdev'): {'Field 1': 0.03}, 
    ('Test1', 0, 'mean'): {'Field 1': 1.00}, 
    ('Test1', 0, 'stErr'): {'Field 1': 0.00}, 
    ('Test1', 0, 'stdev'): {'Field 1': 0.00}, 
    ('Test1', 48, 'mean'): {'Field 1': 1.08}, 
    ('Test1', 48, 'stErr'): {'Field 1': 0.01}, 
    ('Test1', 48, 'stdev'): {'Field 1': 0.03}} 

df = pd.DataFrame(d).T 

我想其他類別的「比」在添加到數據幀當前存在mean,stErr和stdev的級別。

目前該指數看起來是這樣的:

df.index() 
MultiIndex(levels=[['Control', 'Test1'], [0, 48], ['mean', 'stErr', 'stdev']], 
     labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) 

爲了澄清,我想補充的類別比我相信新的數據框的指數應該是這樣

df_new.index() 
MultiIndex(levels=[['Control', 'Test1'], [0, 48], ['mean', 'stErr', 'stdev', 'ratio']], 
     labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]]) 
+0

不'df.index = df.index.set_levels([ '平均', 'stErr', 'STDEV', '比'],級別= 2)'你想要什麼? –

+0

@VictorChubukov,似乎是無效的語法。 'df.index = df .index.set_levels(['mean','stErr','stdev','ratio'],level = 2) ^ SyntaxError:標識符中的無效字符 – agf1997

+0

您有額外的空間 –

回答

1

讓說你有一個pd.MultiIndexmux

mux = pd.MultiIndex(
    levels=[['Control', 'Test1'], 
      [0, 48], 
      ['mean', 'stErr', 'stdev']], 
    labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], 
      [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1], 
      [0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1]], 
    names=['device', 'interval', None]) 

您可以使用set_levels

mux.set_levels(['mean', 'stErr', 'stdev', 'ratio'], level=2, inplace=True) 

但隨後你需要設置標籤,以及跟進。

這是一個非常聰明的方法。

mux = mux.to_series().unstack([0, 1]) \ 
     .append(pd.Series(None, name='ratio')) \ 
     .unstack().index 
+0

這實際上如何應用於數據框? – agf1997

+0

你的問題表明你想要一個新的'pd.MultiIndex'。如果你想要別的東西,你應該花時間來展示你想要的東西。閱讀此指南http://stackoverflow.com/help/mcve – piRSquared

+0

我顯示索引來幫助描述數據框的佈局。我會進一步澄清。 – agf1997