我有一个像这样的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_names
和col_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