【问题标题】: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。

标签: python pandas


【解决方案1】:

如果所有值都是字符串,则使用 Index.map 和 join:

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

或format 或f-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 - 刚刚编辑的答案。
猜你喜欢
  • 2019-08-06
  • 2019-11-01
  • 2022-11-21
  • 2016-06-13
  • 2019-07-28
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多