Unir marcos de datos de pandas por nombres de columna

84

Tengo dos marcos de datos con los siguientes nombres de columna:

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

Me gustaría obtener un marco de datos con las siguientes columnas uniéndome (izquierda) en county_ID = countyid:

joined_dataframe
event_id, date, time, county, state

No puedo averiguar cómo hacerlo si las columnas a las que quiero unirme no son el índice. ¿Cuál es la forma más fácil? ¡Gracias!

Alexis Eggermont
fuente

Respuestas:

157

puede utilizar las opciones left_on y right_on de la siguiente manera:

pd.merge(frame_1, frame_2, left_on='county_ID', right_on='countyid')

No estaba seguro de la pregunta si solo quería fusionar si la clave estaba en el marco de datos de la izquierda. Si ese es el caso, lo siguiente hará eso (lo anterior, en efecto, hará una fusión de muchos a muchos)

pd.merge(frame_1, frame_2, how='left', left_on='county_ID', right_on='countyid')
Orgullo Woody
fuente
1
Para ampliar esto un poco, si desea especificar un índice en un lado, puede usar right_index=True.
Druckles
1
@Woody ¿Y si frame_1ya tiene county_IDcomo índice, y frame_2ya tiene countyidcomo índice? Entiendo que puedo sustituir frame_1.reset_index()por frame_1(y lo mismo para frame_2) en su respuesta. Pero, ¿hay una forma más eficiente de unirse / fusionar sin restablecer el índice?
Zhang 18 de
3

necesita hacer county_IDcomo índice para el marco derecho:

frame_2.join ( frame_1.set_index( [ 'county_ID' ], verify_integrity=True ),
               on=[ 'countyid' ], how='left' )

para su información, en pandas la unión izquierda se rompe cuando el marco derecho tiene valores no únicos en la columna de unión. ver este error .

por lo que debe verificar la integridad antes de unirse , verify_integrity=True

behzad.nouri
fuente