Home > OS >  Renaming columns with same name
Renaming columns with same name

Time:01-05

I'm trying to rename three columns "Devolutiva" that has the same name but isn't working, can u guys help me understand what's happening?

First output

df_fields.columns
Index(['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
       'Observações gerais', 'Devolutiva', 'Devolutiva', 'Devolutiva',
       'Centro de Custo 1'],
      dtype='object')

I tried this:

df_fields = df_fields.rename({df_fields.columns[7] : 'Devolutiva_Ind',
                              df_fields.columns[8] : 'Devolutiva_Log',
                              df_fields.columns[9] : 'Devolutiva_Com'})

Tried this:

df_fields = df_fields.rename({'Devolutiva' : 'Devolutiva_Ind',
                              'Devolutiva' : 'Devolutiva_Log',
                              'Devolutiva' : 'Devolutiva_Com'})

And also this:

df_fields = df_fields.rename({'Devolutiva_1' : 'Devolutiva_Ind',
                              'Devolutiva_2' : 'Devolutiva_Log',
                              'Devolutiva_3' : 'Devolutiva_Com'})

And it keep printing the same .columns output as above, so weird.

Thanks in advance!

CodePudding user response:

Try:

df_fiels.columns = ['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
       'Observações gerais', 'Devolutiva_newName1', 'Devolutiva_newName2', 'Devolutiva_newName3', 'Centro de Custo 1']

CodePudding user response:

why it doesn't work?

If you run the following in your python interpreter:

{'Devolutiva' : 'Devolutiva_Ind',
 'Devolutiva' : 'Devolutiva_Log',
 'Devolutiva' : 'Devolutiva_Com'}

you will realize that only the last value is kept:

{'Devolutiva': 'Devolutiva_Com'}

A dictionary cannot contain duplicate keys. So, you are actually just running:

df_fields.rename({'Devolutiva' : 'Devolutiva_Com'})

how to de-duplicate the column names?

You could use a helper generator:

def suffix():
    yield ''
    i = 0
    while True:
        i  = 1
        yield f'_{i}'

from collections import defaultdict
d = defaultdict(suffix)

df.columns  = df.columns.map(lambda x: x next(d[x]))

output:

df.columns

Index(['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
       'Observações gerais', 'Devolutiva', 'Devolutiva_1', 'Devolutiva_2',
       'Centro de Custo 1'],
      dtype='object')
  •  Tags:  
  • Related