通过将列的名称与 int 和字符串连接来索引的多索引列

Multiindex columns to Index by concatenating column's name with int and strings

我有我的df.columns =这个MultiIndex

MultiIndex([(        'F', 1),
            (        'F', 2),
            (        'F', 3),
            (        'F', 4),
            (        'F', 5),
            (        'F', 6),
            (        'F', 7),
            (        'F', 8),
            (        'F', 9),
            (    'FG', 1),
            (    'FG', 2),
            (    'FG', 3),
            (    'FG', 4),
            (    'FG', 5),
            (    'FG', 6),
            (    'FG', 7),
            (    'FG', 8),
            (    'FG', 9),
            (    'R', 1),
            (    'R', 2),
            (    'R', 3),
            (    'R', 4),
            (    'R', 5),
            (    'R', 6),
            (    'R', 7),
            (    'R', 8),
            (    'R', 9),
            ('RG', 1),
            ('RG', 2),
            ('RG', 3),
            ('RG', 4),
            ('RG', 5),
            ('RG', 6),
            ('RG', 7),
            ('RG', 8),
            ('RG', 9),
            (    'FR', 1),
            (    'FR', 2),
            (    'FR', 3),
            (    'FR', 4),
            (    'FR', 5),
            (    'FR', 6),
            (    'FR', 7),
            (    'FR', 8),
            (    'FR', 9)],
           names=[None, 'Profondeur'])

我希望它变成这样 Index :

Index(['F_1', 'F_2', 'F_3', 'F_4', 'F_5', 'F_6', 'F_7', 'F_8', 'F_9',
       'FG_1', 'FG_2', 'FG_3', 'FG_4', 'FG_5', 'FG_6', 'FG_7', 'FG_8', 'FG_9',
       'R_1', 'R_2', 'R_3', 'R_4', 'R_5', 'R_6', 'R_7', 'R_8', 'R_9',
       'RG_1', 'RG_2', 'RG_3', 'RG_4', 'RG_5', 'RG_6', 'RG_7', 'RG_8', 'RG_9',
       'FR_1', 'FR_2', 'FR_3', 'FR_4', 'FR_5', 'FR_6', 'FR_7', 'FR_8', 'FR_9'], dtype='object')

我对MultiIndex了解不多,是通过unstack()方法得到的。事实上,我想将两个级别结合起来,将它们的列名称与“_”作为分隔符连接起来。另外 'Profondeur' 标签是 int 可能需要改为 str

通过将列分配回列表,将 MultiIndex 折叠成一个简单的 Index。在这种情况下,对 '_'.join MultiIndex 的两个组件(值是简单的元组)使用列表理解,并使用额外的映射到字符串的步骤,因为您不能将字符串与 int 进行字符串连接。

df.columns = ['_'.join(map(str, x)) for x in df.columns]

print(df.columns)
#Index(['F_1', 'F_2', 'F_3', 'F_4', 'F_5', 'F_6', 'F_7', 'F_8', 'F_9', 'FG_1',
#       'FG_2', 'FG_3', 'FG_4', 'FG_5', 'FG_6', 'FG_7', 'FG_8', 'FG_9', 'R_1',
#       'R_2', 'R_3', 'R_4', 'R_5', 'R_6', 'R_7', 'R_8', 'R_9', 'RG_1', 'RG_2',
#       'RG_3', 'RG_4', 'RG_5', 'RG_6', 'RG_7', 'RG_8', 'RG_9', 'FR_1', 'FR_2',
#       'FR_3', 'FR_4', 'FR_5', 'FR_6', 'FR_7', 'FR_8', 'FR_9'],
#      dtype='object')