Pandas: Sufijos ignorados en la segunda combinación

Creado en 10 feb. 2015  ·  3Comentarios  ·  Fuente: pandas-dev/pandas

Estoy tratando de fusionar varios marcos de datos con operaciones de fusión consecutivas, quiero agregar un sufijo al nombre de los nombres de las columnas recién fusionadas. Una versión simplificada de mi código se ve así:

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

Con pandas 0.15.2 en python 2.7, esto devuelve:

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

mientras yo hubiera esperado

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

Comentario más útil

parece que solo quieres esto?

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

los sufijos solo se aplican si hay columnas duplicadas que después de la primera combinación no las hay (en comparación con la tercera)

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 comentarios

parece que solo quieres esto?

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

los sufijos solo se aplican si hay columnas duplicadas que después de la primera combinación no las hay (en comparación con la tercera)

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, gracias por la explicación, me perdí el hecho de que los sufijos solo se aplican a los nombres de columna duplicados. Y, de hecho, la solución concat es más sencilla. Y para el registro: concat (... ignore_index = True) es exactamente lo contrario de lo que quiero, pero con concat (... ignore_index = False) funciona bien.

genial

tenga en cuenta que generalmente no desea tener columnas duplicadas

es posible que desee un resultado de varios niveles: use el argumento keys para concat

¿Fue útil esta página
0 / 5 - 0 calificaciones