La opción “left” de la función merge de Pandas está perdiendo filas en el marco de datos izquierdo.
Tengo 2 dataframes.
El primer dataframe (izquierda) tiene 5,000,000 filas, el segundo solo tiene 47,000 filas.
Cuando intento combinar estos dataframes con la opción “izquierda”, solo obtengo 47,000 filas.
first = pd.read_csv('first.csv')
second = pd.DataFrame(first['id'])
second.drop_duplicates(inplace=True)
second['mark'] = second['id'].apply(lambda x:get_mark(x))
new = first.merge(second, how='left', on='id')
Aquí obtengo 47,000 filas.
Vuelvo a abrir el primer dataframe.
first = pd.read_csv('first.csv')
new = first.merge(second, how='left', on='id')
Aquí obtengo 5,000,000 filas con marcas.
¿Cómo puedo evitar volver a cargar el primer dataframe o solucionar este problema?
davy.ai
El problema es que en el primer fragmento de código,
second
se crea como un DataFrame que sólo contiene la columnaid
y su valor correspondiente demark
. Al fusionarse confirst
usando la opciónleft
, sólo se mantienen las filas enfirst
que tienen valores deid
que coinciden ensecond
, lo que resulta en sólo 47,000 filas.Para solucionar esto, podemos crear
second
como un DataFrame que contiene todas las columnas necesarias defirst
, y luego eliminar los duplicados basados en la columnaid
, asegurando que los valores demark
se mantengan.Ahora, al fusionar
first
consecond
usando la opciónleft
, se mantienen todas las filas defirst
, con los valores demark
correspondientes para los valores deid
que coinciden ensecond
. El métododrop_duplicates
asegura que el resultado del DataFramesecond
sólo contenga valores únicos deid
.