2012-04-11 30 views
14

Me gusta pensar que no soy un idiota, pero tal vez estoy equivocado. ¿Alguien puede explicarme por qué esto no funciona? Puedo lograr los resultados deseados usando 'fusionar'. Pero finalmente necesito unirme al pandasDataFrames, así que necesito que este método funcione.Pandas: ¿simple 'join' no funciona?

In [2]: left = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value': [4.685, 2.491]}) 

In [3]: right = pandas.DataFrame({'ST_NAME': ['Oregon', 'Nebraska'], 'value2': [6.218, 0.001]}) 

In [4]: left.join(right, on='ST_NAME', lsuffix='_left', rsuffix='_right') 
Out[4]: 
    ST_NAME_left value ST_NAME_right value2 
0  Oregon 4.685   NaN  NaN 
1  Nebraska 2.491   NaN  NaN 

Respuesta

12

Intente utilizar merge (http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging):

In [14]: right 
Out[14]: 
    ST_NAME value2 
0 Oregon 6.218 
1 Nebraska 0.001 

In [15]: merge(left, right) 
Out[15]: 
    ST_NAME value value2 
0 Nebraska 2.491 0.001 
1 Oregon 4.685 6.218 

In [18]: merge(left, right, on='ST_NAME', sort=False) 
Out[18]: 
    ST_NAME value value2 
0 Oregon 4.685 6.218 
1 Nebraska 2.491 0.001 

DataFrame.join es un poco de método heredado y aparentemente no hace uniones columna por columna (originalmente indexó en columna usando el parámetro on, de ahí la designación "legacy").

+2

Interesante. Entonces, parece que para obtener lo que quiero, tendré que realizar fusiones sucesivas, ya que 'merge' solo toma dos DataFrames. – Phil

+0

Tuve el mismo problema y encontré esta respuesta. Es correcto. De 0.16.2 documentos: El método DataFrame.join relacionado, utiliza fusión internamente para las uniones index-on-index e index-on-column (s), pero se une a los índices de forma predeterminada en lugar de intentar unirse en columnas comunes (el comportamiento predeterminado para la fusión). jdmarino

Cuestiones relacionadas