Pandas从array和OrderedDict创建多索引



我有一个像这样的pandas数据框架:

col1  col2  col3  col4  col5  col6
val1  val2  val3  val4  val5  val6
...

我有一个包含level1列名的数组和一个包含level0列名的OrderedDict,以及它们下面有多少列:

col_names = ['id', 'a', 'b', 'a', 'b', 'c']
col_layout_dict = OrderedDict([('ID', 1), ('A', 2), ('B', 2), ('C', 1)])

col_namescol_layout_dict也在代码的其他部分使用,所以我不想改变它们,而且,因为它们已经可用,我想重新利用它们来更新我的数据框架的列名,如下所示:

ID    A           B           C
id    a     b     a     b     c
val1  val2  val3  val4  val5  val6
...

我该怎么做?

使用range对dict的平坦值进行列表推导:

col_names = ['id', 'a', 'b', 'a', 'b', 'c']
col_layout_dict = OrderedDict([('ID', 1), ('A', 2), ('B', 2), ('C', 1)])
c = [k for k, v in col_layout_dict.items() for x in range(v)]
col_names = ['id', 'a', 'b', 'a', 'b', 'c']
mux = pd.MultiIndex.from_arrays([c, col_names])
print (mux)
MultiIndex([('ID', 'id'),
( 'A',  'a'),
( 'A',  'b'),
( 'B',  'a'),
( 'B',  'b'),
( 'C',  'c')],
)
df.columns = mux