Python:添加一级多重索引

Python:添加一级多重索引,python,pandas,multi-index,Python,Pandas,Multi Index,我有以下数据帧: 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))

我有以下数据帧:

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}}

我想在其中添加一个额外级别的列索引,如红色所示

我创建了多索引,如下所示:

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}}

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

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'])

但是,如果您在创建多索引时遇到了麻烦,您可以将其分配给
columns
属性

df.columns = MI
df

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

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'])

但是,如果您在创建多索引时遇到了麻烦,您可以将其分配给
columns
属性

df.columns = MI
df

为我工作


为我工作。

@DaQi你是说df.index=MI?这将尝试将MI应用于行(与列相对),然后
df.columns=index
@DaQi您的意思是df.index=MI?这将尝试将MI应用于行(与列相对),然后
df.columns=index