重命名多索引数据帧

2024-10-04 15:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多索引数据帧

                            Issue
                       high  med   low
name   age    empId
Jack    44     Ab1      0     1     0
Bob     34     Ab2      0     0     1
Mike    52     Ab6      1     1     0

当我执行df.columns时,我得到以下结果:-

MultiIndex(levels=[['Issue'], ['high', 'med', 'low']],
       labels=[[0, 0, 0], [0, 1, 2]])

我希望通过重命名Multi_index issue列来扁平化这个数据帧

预期输出df:

name   age    empId  Issue_high  Issue_med  Issue_low
Jack    44     Ab1      0           1         0
Bob     34     Ab2      0           0         1
Mike    52     Ab6      1           1         0

我试过这个:

df2 = df.rename(columns={'high':'Issue_high','low':'Issue_low','med':'Issue_med'}, level = 1)

我出错了。 rename() got an unexpected keyword argument "level"

有没有办法得到输出结构

编辑:通过使用df.columns = df.columns.map('_'.join)我得到

                     Issue_high  Issue_med  Issue_low
name   age    empId  
Jack    44     Ab1      0           1         0
Bob     34     Ab2      0           0         1
Mike    52     Ab6      1           1         0

df.columns
>>> Index(['Issue_high',
   'Issue_med', 'Issue_low'],
  dtype='object')

Tags: columnsnamedfagemedissuelowbob
1条回答
网友
1楼 · 发布于 2024-10-04 15:24:02

如果所有值都是字符串,请将^{}join一起使用:

df.columns = df.columns.map('_'.join)

formatf-strings-也处理级别中的数值:

df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
df.columns = df.columns.map(lambda x: f'{x[0]}_{x[1]}')

MultiIndex in Index转换为列的最后^{}

df = df.reset_index()
print (df)
   name  age empId  Issue_high  Issue_med  Issue_low
0  Jack   44   Ab1           0          1          0
1   Bob   34   Ab2           0          0          1
2  Mike   52   Ab6           1          1          0

相关问题 更多 >

    热门问题