重命名堆积的列

时间:2015-03-20 23:01:37

标签: python pandas

我将列设置为

>>> 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级列名称"。

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

给了我我想要的东西。