2012-04-11 11 views
14

Mi piace pensare di non essere un idiota, ma forse mi sbaglio. Qualcuno può spiegarmi perché questo non funziona? Posso ottenere i risultati desiderati usando 'fusione'. Ma alla fine dovrò unirmi a più pandasDataFrames quindi ho bisogno di far funzionare questo metodo.Panda: semplice 'join' non funziona?

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 

risposta

12

Provare a utilizzare 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 è un po 'di metodo legacy e apparentemente non fa join su colonna (in origine faceva index su colonne usando il parametro on, da cui la designazione "legacy").

+2

Interessante. Quindi sembra che per ottenere quello che voglio, dovrò eseguire successive fusioni, dato che 'merge' prende solo due DataFrames? – Phil

+0

Ho avuto lo stesso problema e ho trovato questa risposta. È corretto. Dai documenti 0.16.2: Il metodo DataFrame.join correlato, utilizza l'unione internamente per i join index-su-index e index-on-column (s), ma si aggiunge agli indici per impostazione predefinita anziché provare a unirsi su colonne comuni (il comportamento predefinito per l'unione). jdmarino

Problemi correlati