2017-02-06 1 views
1

Als Ergebnis einer groupby + unstack haben meine Spalten jetzt eine zusätzliche Ebene. Die Funktion list(df.columns.values) zeigtPandas: Drop-Spalte Ebene & Merge-Titel

[('CompanyId', ''), 
('CompanyName', ''), 
('City', ''), 
('Revenue', 2015), 
('Revenue', 2016), 
('Revenue', 2017)] 

Ich möchte eine Ebene fallen zu lassen und verschmelzen diese Titel, das folgende Ergebnis zu erhalten.

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

Die Funktion df.droplevel(level=1) hilft mir ein Niveau fallen, aber ich bin nicht sicher, wie die Ebene 1 Spaltentitel auf der Ebene diejenigen anhängen 0, bevor sie fallen zu lassen.

Antwort

0

können Sie verwenden list comprehension, aber ist notwendig, convert int zu 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 
Verwandte Themen