2017-01-03 154 views
1

的水平,我有以下数据框:Python的熊猫:添加MultIndexing

enter image description here

,我要添加有列如以红色显示的索引的级别。

我创建了多指标如下:

MI = pd.MultiIndex(levels=[['trade_input', 'mae_function'], list(df)], 
        labels=[[0, 0, 1, 1, 1, 1], range(len(list(df)))], 
        names=['first', 'second']) 

如何添加了多指标,以现有的数据帧?我如何指定它应该应用于列?

这里的数据和命令下面重建原始数据框:

df = pd.DataFrame(data = dict, columns = ['entry_index', 'exit_index', 'direction', 'high', 'low', 'compar_tuples']) 

dict = {'compar_tuples': {0: [(1, slice('1', '1', None))], 
     1: [(1, slice('1', '2', None)), (2, slice('2', '2', None))], 
     2: [(1, slice('1', '3', None)), 
     (2, slice('2', '3', None)), 
     (3, slice('3', '3', None))], 
     3: [(1, slice('1', '4', None)), 
     (2, slice('2', '4', None)), 
     (3, slice('3', '4', None)), 
     (4, slice('4', '4', None))], 
     4: [(1, slice('1', '5', None)), 
     (2, slice('2', '5', None)), 
     (3, slice('3', '5', None)), 
     (4, slice('4', '5', None)), 
     (5, slice('5', '5', None))], 
     5: [(1, slice('1', '6', None)), 
     (2, slice('2', '6', None)), 
     (3, slice('3', '6', None)), 
     (4, slice('4', '6', None)), 
     (5, slice('5', '6', None)), 
     (6, slice('6', '6', None))], 
     6: [(1, slice('1', '7', None)), 
     (2, slice('2', '7', None)), 
     (3, slice('3', '7', None)), 
     (4, slice('4', '7', None)), 
     (5, slice('5', '7', None)), 
     (6, slice('6', '7', None)), 
     (7, slice('7', '7', None))]}, 
    'direction': {0: 1, 1: -1, 2: -1, 3: -1, 4: -1, 5: -1, 6: -1}, 
    'entry_index': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}, 
    'exit_index': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7}, 
    'high': {0: 1209.75, 
     1: 1211.0, 
     2: 1211.25, 
     3: 1207.25, 
     4: 1206.25, 
     5: 1205.75, 
     6: 1205.5}, 
    'low': {0: 1207.25, 
     1: 1207.5, 
     2: 1205.75, 
     3: 1206.0, 
     4: 1201.0, 
     5: 1202.75, 
     6: 1203.75}} 

回答

1

最简单的方法是使用pd.concatkeys参数

ti_cols = df.columns[:2] 
mae_cols = df.columns[2:] 
pd.concat([df[ti_cols], df[mae_cols]], axis=1, keys=['trade_inputs', 'mae_function']) 

enter image description here

但是,如果你”经历了多重索引的麻烦,你可以将它分配给columns属性

df.columns = MI 
df 

enter image description here

-1
df.index = index 

为我工作。

+0

@ DaQi you mean df.index = MI? 这试图将MI应用于行(与列相反) –

+0

然后'df.columns = index' –