我将列设置为
>>> test2.columns
MultiIndex(levels=[[u't070199', u't070299', u't070201', u't070105', u't070104', u'employment'], [u'foo', u'fubar']],
labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]],
names=[u'foo', u'status'])
我想创建一个"网格"在这两个级别中,我现在正在做以下事情:
level0 = test2.columns.levels[0]
level1 = test2.columns.levels[1]
columnNames = []
for l in level0:
for j in level1:
columnNames.append(l+'_'+j)
columnNames
['t070199_foo', 't070199_fubar', 't070299_foo', 't070299_fubar', ...]
这正是我想要的,但它看起来并不干净。考虑到这两组,我认为有一种Python
方式可以更舒适地交织这两种方式。或者,也许是pandas
提供的自然方式来创建一个级别的列名称"超出" 2级列名称"。
答案 0 :(得分:2)
你可以做的一件事就是使用列表理解:
columnNames = [lev0 + '_' + lev1 for lev0 in level0 for lev1 in level1]
答案 1 :(得分:0)
test2.columns.ravel()
为我提供了以下元组:('t070199', 'foo'), ('t070199', 'fubar')...
。
所以,我可以做到
test2.columns = ['_'.join(x) for x in test2.columns.ravel()]
给了我我想要的东西。