Cómo unirse a LEFT ANTI bajo alguna condición coincidente en Pandas

LEFT ANTI Join es lo opuesto a semi-join. excluyendo la intersección, devuelve la tabla de la izquierda. Solo devuelve las columnas de la tabla de la izquierda y no de la derecha.

Método 1: Usar isin()

En los marcos de datos creados, realizamos la combinación izquierda y el subconjunto usando la función isin() para verificar si la parte en la que se fusionan los conjuntos de datos está en el subconjunto del conjunto de datos fusionado.

Sintaxis :

DataFrame.isin(valores)

Parámetros

  • valores: iterable, Series, DataFrame o dict

Devoluciones

Marco de datos

Ejemplo :

En el siguiente código, usamos el indicador para encontrar las filas que son ‘Left_only’ y crear un subconjunto del conjunto de datos fusionado, y asignarlo a df. finalmente, recuperamos la parte que está solo en nuestro primer marco de datos df1. la salida es antijoin de los dos marcos de datos.

Python3

# importing packages
import pandas as pd
  
# anti-join
# creating dataframes using pd.DataFrame() method.
df1 = pd.DataFrame({
    "city": ["new york", "chicago", "orlando", 'mumbai'],
    "temperature": [21, 14, 35, 30],
    "humidity": [65, 68, 75, 75],
})
df2 = pd.DataFrame({
    "city": ["chicago", "new york", "orlando"],
    "humidity": [67, 60, 70]
})
  
# carrying out anti join using merge method
df3 = df1.merge(df2, on='city', how='left', indicator=True)
  
df = df3.loc[df3['_merge'] == 'left_only', 'city']
  
d = df1[df1['city'].isin(df)]
  
print(d)

Producción:

     city  temperature  humidity
3  mumbai           30        75

Método 2: Usar semijoin

Podemos usar el operador ‘~’ en la semi-unión. Resulta en anti-join. 

Semi-join : similar a la combinación interna, semi-join devuelve la intersección pero solo devuelve las columnas de la tabla izquierda y no de la derecha. no tiene valores duplicados. 

Sintaxis :

[~df1[‘nombre_columna’].isin(df2[‘nombre_columna’])]

dónde, 

  • df1 es el primer marco de datos
  • df2 es el segundo marco de datos
  • column_name es la columna coincidente en ambos marcos de datos

Ejemplo :

En este ejemplo, fusionamos df1 y df2 en ‘ciudad’ de forma predeterminada es ‘unión interna’, después de fusionar, excluimos la parte de df1 que está en df3 e imprimimos el marco de datos resultante. 

Python3

# code
import pandas as pd
  
# inverse of semi-join:
# creating dataframes using pd.DataFrame() method.
df1 = pd.DataFrame({
    "city": ["new york", "chicago", "orlando", 'mumbai'],
    "temperature": [21, 14, 35, 30],
    "humidity": [65, 68, 75, 75],
})
df2 = pd.DataFrame({
    "city": ["chicago", "new york", "orlando"],
    "humidity": [67, 60, 70]
})
  
# carrying out anti join using merge method
df3 = df1.merge(df2, on='city')
  
df = df1[~df1['city'].isin(df3['city'])]
  
print(df)

Salida :

     city  temperature  humidity
3  mumbai           30        75

Publicación traducida automáticamente

Artículo escrito por isitapol2002 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *