重命名多索引数据框熊猫[重复]
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.map
和 join
:
df.columns = df.columns.map('_'.join)
或format
或f-string
s - 也可以在级别中使用数值:
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 - 刚刚编辑的答案。以上是关于重命名多索引数据框熊猫[重复]的主要内容,如果未能解决你的问题,请参考以下文章