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