Pandas: Sufixos ignorados na segunda fusão

Criado em 10 fev. 2015  ·  3Comentários  ·  Fonte: pandas-dev/pandas

Estou tentando mesclar vários dataframes com operações de mesclagem consecutivas, quero adicionar um sufixo ao nome dos nomes das colunas recém-mescladas. Uma versão simplificada do meu código se parece com isto:

from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns

Com o pandas 0.15.2 no python 2.7, isso retorna:

Index([u'data_0', u'data_1', u'data'], dtype='object')

enquanto eu esperava

Index([u'data_0', u'data_1', u'data_2'], dtype='object')
Reshaping Usage Question

Comentários muito úteis

parece que você só quer isso?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

os sufixos só se aplicam se houver colunas duplicadas que não existam após a primeira mesclagem (em comparação com a 3ª)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

Todos 3 comentários

parece que você só quer isso?

In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]: 
   0  1  2
a  1  6  7
b  2  5  9
c  3  4  8

os sufixos só se aplicam se houver colunas duplicadas que não existam após a primeira mesclagem (em comparação com a 3ª)

In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))

In [47]: merged1
Out[47]: 
   data_0  data_1
c       3       4
b       2       5
a       1       6

In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]: 
   data_0  data_1  data
a       1       6     7
c       3       4     8
b       2       5     9

Ah, obrigado pela explicação, eu perdi o fato de que os sufixos só são aplicados a nomes de colunas duplicados. E, de fato, a solução concat é mais simples. E para o registro: concat (... ignore_index = True) é exatamente o oposto do que eu quero, mas com concat (... ignore_index = False) funciona bem.

ótimo

tenha em mente que você geralmente não quer ter colunas duplicadas

você pode querer um resultado de vários níveis - use o argumento keys para concat

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Ashutosh-Srivastav picture Ashutosh-Srivastav  ·  3Comentários

matthiasroder picture matthiasroder  ·  3Comentários

andreas-thomik picture andreas-thomik  ·  3Comentários

swails picture swails  ·  3Comentários

jaradc picture jaradc  ·  3Comentários