Python 熊猫:下拉列级别&;合并标题

Python 熊猫:下拉列级别&;合并标题,python,pandas,Python,Pandas,由于使用了groupby+unstack,我的列现在有了一个额外的级别。函数列表(df.columns.values)显示 [('CompanyId', ''), ('CompanyName', ''), ('City', ''), ('Revenue', 2015), ('Revenue', 2016), ('Revenue', 2017)] 我想降低一个级别并合并这些标题,以获得以下结果 ['CompanyId', 'CompanyName', 'City', 'Reven

由于使用了
groupby
+
unstack
,我的列现在有了一个额外的级别。函数
列表(df.columns.values)
显示

[('CompanyId', ''),
 ('CompanyName', ''),
 ('City', ''),
 ('Revenue', 2015),
 ('Revenue', 2016),
 ('Revenue', 2017)]
我想降低一个级别并合并这些标题,以获得以下结果

['CompanyId',
 'CompanyName',
 'City',
 'Revenue2015',
 'Revenue2016',
 'Revenue2017']

函数
df.droplevel(level=1)
帮助我删除一个级别,但我不确定如何在删除级别1的列标题之前将其附加到级别0的列标题

您可以使用
列表理解,
但必须将
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