es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que en el primer fragmento de código, second se crea como un DataFrame que sólo contiene la columna id y su valor correspondiente de mark. Al fusionarse con first usando la opción left, sólo se mantienen las filas en first que tienen valores de id que coinciden en second, lo que resulta en sólo 47,000 filas.

    Para solucionar esto, podemos crear second como un DataFrame que contiene todas las columnas necesarias de first, y luego eliminar los duplicados basados en la columna id, asegurando que los valores de mark se mantengan.

    first = pd.read_csv('first.csv')
    second = first[['id', 'mark']].drop_duplicates()
    new = first.merge(second, how='left', on='id')
    

    Ahora, al fusionar first con second usando la opción left, se mantienen todas las filas de first, con los valores de mark correspondientes para los valores de id que coinciden en second. El método drop_duplicates asegura que el resultado del DataFrame second sólo contenga valores únicos de id.

Comments are closed.