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