Cómo obtener un marco de datos fusionado a partir de dos marcos de datos con un valor de columna común, de forma que sólo las filas del marco de datos fusionado tengan un valor común en una columna determinada.
Tengo 5000 filas de df1
como formato : -.
director_name actor_1_name actor_2_name actor_3_name movie_title
0 James Cameron CCH Pounder Joel David Moore Wes Studi Avatar
1 Gore Verbinski Johnny Depp Orlando Bloom Jack Davenport Pirates
of the Caribbean: At World's End
2 Sam Mendes Christoph Waltz Rory Kinnear Stephanie Sigman Spectre
y 10000 filas de df2
como
movieId genres movie_title
1 Adventure|Animation|Children|Comedy|Fantasy Toy Story
2 Adventure|Children|Fantasy Jumanji
3 Comedy|Romance Grumpier Old Men
4 Comedy|Drama|Romance Waiting to Exhale
Una columna común 'movie_title' tienen valores comunes y en base a ellos, quiero obtener todas las filas donde 'movie_title' es el mismo. Otras filas a eliminar.
Cualquier ayuda/sugerencia será apreciada.
Nota: Ya he probado
pd.merge(dfinal, df1, on='movie_title')
y la salida viene como una fila
director_name actor_1_name actor_2_name actor_3_name movie_title movieId title genres
y en cómo ="outer"/"left", "right", he intentado todos y didn't obtener cualquier fila después de caer NaN aunque muchos coloumn común existen.
Puede utilizar pd.merge
:
import pandas as pd
pd.merge(df1, df2, on="movie_title")
Sólo se conservan las filas para las que se encuentran claves comunes en ambos marcos de datos. En caso de que desee conservar todas las filas del marco de datos izquierdo y sólo añadir valores de df2
en los que exista una clave coincidente, puede utilizar how="left"
.
Podemos fusionar dos marcos de datos de varias maneras. La forma más común en python es utilizar la operación de fusión en Pandas.
import pandas
dfinal = df1.merge(df2, on="movie_title", how = 'inner')
Para la fusión basada en columnas de diferentes marcos de datos, puede especificar los nombres de columna común izquierda y derecha, especialmente en caso de ambigüedad de dos nombres diferentes de la misma columna, digamos - 'movie_title'
como 'movie_name'
.
dfinal = df1.merge(df2, how='inner', left_on='movie_title', right_on='movie_name')
Si quieres ser aún más específico, puedes leer la documentación de la operación pandas merge
.
Si desea fusionar dos marcos de datos y desea un marco de datos fusionado en el que sólo aparezcan los valores comunes de ambos marcos de datos, realice una fusión interna.
import pandas as pd
merged_Frame = pd.merge(df1,df2, on = id,how=inner)