Pandas anti-unión

Mehvish Ashiq 15 febrero 2024
  1. Pandas Anti-Join y sus tipos
  2. Realizar el Anti-Join Izquierdo en Pandas
  3. Realice el Anti-Join Correcto en Pandas
Pandas anti-unión

Este tutorial describe las anti-uniones de Pandas, describe brevemente sus tipos y demuestra cada uno usando códigos de ejemplo.

Pandas Anti-Join y sus tipos

Al usar anti-join, podemos devolver todas las filas (también conocidas como registros y documentos) en un conjunto de datos que no encuentran el valor coincidente en el otro conjunto de datos. Estos se utilizan para manipular conjuntos de datos según los requisitos del proyecto.

pandas anti unión - visualizar anti unión

Hay dos tipos de anti-uniones en Pandas que se enumeran a continuación:

  • Left Anti-Join: devuelve los registros en el conjunto de datos de la izquierda que no tienen registros coincidentes en el conjunto de datos de la derecha.
  • Right Anti-Join: devuelve los registros del conjunto de datos derecho que no coincidieron con los del conjunto de datos izquierdo.

Consulte la representación tabular anterior. Estamos usando el anti-join izquierdo, que devuelve el conjunto de datos izquierdo, excluyendo la intersección.

Tenga en cuenta que solo devuelve columnas del conjunto de datos izquierdo y no del derecho.

De manera similar, el uso de la antiunión correcta devolverá el conjunto de datos correcto, excluyendo la intersección. Al igual que la combinación izquierda, también devolverá columnas del conjunto de datos derecho únicamente y no del izquierdo.

Aprendamos cómo podemos usar ambas anti-uniones en Pandas. Tenga en cuenta que debe tener suficiente conocimiento de combinaciones SQL para comprender firmemente las anticombinaciones.

Realizar el Anti-Join Izquierdo en Pandas

  • Importar la biblioteca.
    import pandas as pd
    

    Primero, importamos la biblioteca pandas para jugar con marcos de datos.

  • Cree dos marcos de datos.
    # first DataFrame
    df1 = pd.DataFrame(
        {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
    )
    
    print("First DataFrame:")
    print(df1)
    
    # second DataFrame
    df2 = pd.DataFrame(
        {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
    )
    
    print("\n\nSecond DataFrame:")
    print(df2)
    

    Creamos dos marcos de datos que contienen puntos de muestra para diferentes secciones que puede ver a continuación.

    PRODUCCIÓN:

    First DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        D      15
    4        E      31
    
    
    Second DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        F      24
    4        G      30
    
  • Realice la unión externa.
    outer_join = df1.merge(df2, how="outer", indicator=True)
    print(outer_join)
    

    Para realizar la antiunión, debemos pasar por la unión externa, que devuelve los valores coincidentes y no coincidentes de uno o ambos conjuntos de datos. Estamos obteniendo valores coincidentes y no coincidentes de ambos conjuntos de datos (puede ver esto en el siguiente resultado).

    Aquí, el método merge() se utiliza para actualizar los datos de dos marcos de datos mediante el uso de métodos particulares para fusionarlos. Estamos usando algunos parámetros para controlar qué valores reemplazar y qué mantener.

    • df2 - Es otro marco de datos con el que fusionarse.
    • cómo - Especifica cómo fusionar. Es un parámetro opcional cuyos valores pueden ser izquierda, derecha, exterior, interior o cruz; por defecto, es interior.
    • indicador - Se puede configurar como True, False o un valor de tipo cadena. Si lo configuramos en True, agregará la columna _merge al marco de datos de salida que tiene la información en una fuente de cada fila.

    También podemos dar un nombre diferente a la columna _merge especificando un argumento de cadena. Esta columna contendrá los valores de tipo categórico, por ejemplo, left_only, right_only y both, como tenemos en el siguiente resultado.

    Aquí, “ambos” significa que si la clave de combinación de la observación (fila) se encuentra en ambos conjuntos de datos, left_only muestra que la clave de combinación de la observación se encuentra solo en el conjunto de datos izquierdo, mientras que right_only indica que la combinación de la observación la clave se encuentra solo en el conjunto de datos derecho.

    PRODUCCIÓN:

    sections points      _merge
    0        A      19        both
    1        B      23        both
    2        C      20        both
    3        D      15   left_only
    4        E      31   left_only
    5        F      24 right_only
    6        G      30 right_only
    
  • Realice la combinación izquierda.
    lef_anti_join = outer_join[(outer_join._merge == "left_only")].drop("_merge", axis=1)
    print(lef_anti_join)
    

    Primero, usamos outer_join[(outer_join._merge=='left_only')] para recuperar todas las filas que tienen un valor left_only en la columna _merge, luego lo encadenamos con el método .drop(), que elimina la columna _merge del marco de datos de salida.

    PRODUCCIÓN:

    sections points
    3        D      15
    4        E      31
    

    Ahora vea, obtenemos columnas del marco de datos izquierdo (df1), excluyendo la intersección.

  • Vea el código fuente completo para realizar el anti-join izquierdo en Pandas.
    import pandas as pd
    
    # first DataFrame
    df1 = pd.DataFrame(
        {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
    )
    print("First DataFrame:")
    print(df1)
    
    # second DataFrame
    df2 = pd.DataFrame(
        {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
    )
    print("\n\nSecond DataFrame:")
    print(df2)
    
    # outer join
    outer_join = df1.merge(df2, how="outer", indicator=True)
    
    # left anti join
    lef_anti_join = outer_join[(outer_join._merge == "left_only")].drop("_merge", axis=1)
    print("\n\nLeft Anti-join:")
    print(lef_anti_join)
    

    PRODUCCIÓN:

    First DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        D      15
    4        E      31
    
    
    Second DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        F      24
    4        G      30
    
    
    Left Anti-join:
    sections points
    3        D      15
    4        E      31
    

Realice el Anti-Join Correcto en Pandas

Hemos aprendido paso a paso cómo realizar la combinación izquierda en Pandas. La combinación correcta también se puede hacer de manera similar, pero aquí seleccionaremos aquellas filas con un valor right_only en la columna _merge.

Código de ejemplo:

import pandas as pd

# first DataFrame
df1 = pd.DataFrame(
    {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
)
print("First DataFrame:")
print(df1)

# second DataFrame
df2 = pd.DataFrame(
    {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
)
print("\n\nSecond DataFrame:")
print(df2)

# outer join
outer_join = df1.merge(df2, how="outer", indicator=True)

# right anti join
right_anti_join = outer_join[(outer_join._merge == "right_only")].drop("_merge", axis=1)
print("\n\nRight Anti-join:")
print(right_anti_join)

Producción :

First DataFrame:
  sections  points
0        A      19
1        B      23
2        C      20
3        D      15
4        E      31


Second DataFrame:
  sections  points
0        A      19
1        B      23
2        C      20
3        F      24
4        G      30


Right Anti-join:
  sections  points
5        F      24
6        G      30

Esta vez, obtenemos columnas del marco de datos derecho (df2), excluyendo la intersección.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook