简体   繁体   中英

pandas multiindex columns rename

hi I would like to rename the columns of my df. it has a multiindex columns and I would like to change the second level of it ie I have:

('GDP US Chained 2012 Dollars SAAR', 'GDP CHWG Index') ('GDP US Personal Consumption Chained 2012 Dollars SAAR', 'GDPCTOT Index') ('US Gross Private Domestic Investment Total Chained 2012 SAAR', 'GPDITOTC Index')
1969-12-31 00:00:00 4947.1 3052.12 593.659
1970-03-31 00:00:00 4939.76 3071.06 575.953
1970-06-30 00:00:00 4946.77 3084.97 577.205
1970-09-30 00:00:00 4992.36 3112.01 586.598
1970-12-31 00:00:00 4938.86 3103.57 555.454

I would like to change the second row column and replace The "index" with "" and delete the ' '. I tried:

df.columns.get_level_values(1).str.lower().str.replace('index', '', regex=True).str.strip()

it works but I can not put it in the column name

Use rename with lambda function and parameter level=1 :

L = [('GDP US Chained 2012 Dollars SAAR', 'GDP CHWG Index'),
    ('GDP US Personal Consumption Chained 2012 Dollars SAAR', 'GDPCTOT Index'),
    ('US Gross Private Domestic Investment Total Chained 2012 SAAR', 'GPDITOTC Index')]

c = pd.MultiIndex.from_tuples(L)
df = pd.DataFrame(columns=c, index=[0])

df = df.rename(columns=lambda x: x.lower().replace('index','').strip(), level=1)
print (df)
  GDP US Chained 2012 Dollars SAAR  \
                          gdp chwg   
0                              NaN   

  GDP US Personal Consumption Chained 2012 Dollars SAAR  \
                                                gdpctot   
0                                                NaN      

  US Gross Private Domestic Investment Total Chained 2012 SAAR  
                                                      gpditotc  
0                                                NaN            
df.columns = pd.MultiIndex.from_tuples([ (col0, col1.lower().replace('index', ''), *more_cols) for col0, col1, *more_cols in df.columns], names=df.columns.names)

shoud do

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM