由于groupby
+ unstack
,我的列现在有一个额外的级别。函数list(df.columns.values)
显示
[('CompanyId', ''),
('CompanyName', ''),
('City', ''),
('Revenue', 2015),
('Revenue', 2016),
('Revenue', 2017)]
我想删除一个级别并合并这些标题,以获得以下结果。
['CompanyId',
'CompanyName',
'City',
'Revenue2015',
'Revenue2016',
'Revenue2017']
函数df.droplevel(level=1)
帮助我降低了一个级别,但我不确定如何将级别1列标题附加到级别0的级别,然后再删除它们。
答案 0 :(得分:0)
您可以使用list comprehension,
,但必须将int
转换为str
:
cols = [('CompanyId', ''),
('CompanyName', ''),
('City', ''),
('Revenue', 2015),
('Revenue', 2016),
('Revenue', 2017)]
df = pd.DataFrame(columns=pd.MultiIndex.from_tuples(cols), data = [[1,1,1,1,1,1]])
print (df)
CompanyId CompanyName City Revenue
2015 2016 2017
0 1 1 1 1 1 1
df.columns = [''.join((col[0], str(col[1]))) for col in df.columns]
print (df)
CompanyId CompanyName City Revenue2015 Revenue2016 Revenue2017
0 1 1 1 1 1 1
df.columns = ['{}_{}'.format(x[0], str(x[1])) for x in df.columns]
print (df)
CompanyId_ CompanyName_ City_ Revenue_2015 Revenue_2016 Revenue_2017
0 1 1 1 1 1 1