重命名多索引数据框熊猫[重复]

Posted

技术标签:

【中文标题】重命名多索引数据框熊猫[重复]【英文标题】:Rename multi index dataframe pandas [duplicate] 【发布时间】:2020-03-24 17:45:39 【问题描述】:

我有一个 multiIndex pandas 数据框。

                            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 问题列来展平此数据框。

预期输出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')

【问题讨论】:

您需要在最后一次编辑后reset_index 【参考方案1】:

如果所有值都是字符串,则使用 Index.mapjoin

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

最后一个DataFrame.reset_index 用于将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

【讨论】:

我可以再次展平它以将姓名、年龄、empId 作为列。 @Shubham - 刚刚编辑的答案。

以上是关于重命名多索引数据框熊猫[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python pandas:重命名多索引数据框中的单列标签

重命名具有任意顺序和重复列名的多索引列

使用 Pandas 从查找字典中重命名多索引行

熊猫重命名多级查找列名[重复]

将列添加到熊猫数据框以进行多索引

重命名未命名的列熊猫数据框