Fusionar múltiples pandas de dataframe

Intento combinar varios nuevos marcos de datos en uno principal. Supongamos dataframe principal:

key1 key2 0 0.365803 0.259112 1 0.086869 0.589834 2 0.269619 0.183644 3 0.755826 0.045187 4 0.204009 0.669371 

Y trato de fusionar los 2 siguientes conjuntos de datos dentro del principal,
Nuevos datos1:

  key1 key2 new feature 0 0.365803 0.259112 info1 

Nuevos datos2:

  key1 key2 new feature 0 0.204009 0.669371 info2 

Resultado Esperado:

  key1 key2 new feature 0 0.365803 0.259112 info1 1 0.776945 0.780978 NaN 2 0.275891 0.114998 NaN 3 0.667057 0.373029 NaN 4 0.204009 0.669371 info2 

Lo que intenté:

 test = test.merge(data1, left_on=['key1', 'key2'], right_on=['key1', 'key2'], how='left') test = test.merge(data2, left_on=['key1', 'key2'], right_on=['key1', 'key2'], how='left') 

Funciona bien para el primero, pero no para el segundo, el resultado que obtengo:

  key1 key2 new feature_x new feature_y 0 0.365803 0.259112 info1 NaN 1 0.776945 0.780978 NaN NaN 2 0.275891 0.114998 NaN NaN 3 0.667057 0.373029 NaN NaN 4 0.204009 0.669371 NaN info2 

¡Gracias por tu ayuda!

Primero append o concat ambos DataFrame s juntos y luego merge :

 dat = pd.concat([data1, data2], ignore_index=True) 

O:

 dat = data1.append(data2, ignore_index=True) print (dat) key1 key2 new feature 0 0.365803 0.259112 info1 1 0.204009 0.669371 info2 

 #if same joined columns names better is only on parameter df = test.merge(dat, on=['key1', 'key2'], how='left') print (df) key1 key2 new feature 0 0.365803 0.259112 info1 1 0.086869 0.589834 NaN 2 0.269619 0.183644 NaN 3 0.755826 0.045187 NaN 4 0.204009 0.669371 info2 

Puedes usar pd.DataFrame.update en pd.DataFrame.update lugar:

 # create new column and set index res = test.assign(newfeature=None).set_index(['key1', 'key2']) # update with new data sequentially res.update(data1.set_index(['key1', 'key2'])) res.update(data2.set_index(['key1', 'key2'])) # reset index to recover columns res = res.reset_index() print(res) key1 key2 newfeature 0 0.365803 0.259112 info1 1 0.086869 0.589834 None 2 0.269619 0.183644 None 3 0.755826 0.045187 None 4 0.204009 0.669371 info2 

También puede establecer los marcos de datos en el mismo índice y usar loc simple

 df = df.set_index(["key1", "key2"]) df2 = df2.set_index(["key1", "key2"]) 

Entonces

 df.loc[:, "new_feature"] = df2['new_feature']