GOOGLE ADS

lunes, 18 de abril de 2022

Cómo usar pares clave:valor de un dict para construir un filtro pandas

Tengo un diccionario que puede tomar cualquier longitud, por ejemplo, este:

dic = {'A':'Rome','B':'Japan','C':'EUA'}

y quiero construir una función para filtrar un marco de datos usando el dictado anterior como parámetro, así:

def filter(dic, df):
for k,v in dic.items():
x=df[(df[k]==v) & (df[k]==v) & (df[k]==v)]
return x

Si tuviera que codificar el filtro de arriba sería:

df[(df['A']=='Rome') & (df['B']=='Japan') & (df['C']=='EUA')]

El problema al que me enfrento:

  • El diccionario no tiene una longitud fija, por lo que el número de parámetros cambiará cada vez.


  • El código anterior no está iterando correctamente sobre el diccionario.


  • ¿Cómo puedo hacer que funcione esa función de filtro?


    Solución del problema

    Suponiendo que el dicdiccionario contiene todas las columnas, simplemente use:

    df[df.eq(dic).all(1)]

    de lo contrario, use:

    df[df[list(dic)].eq(dic).all(1)]

    Ejemplo:

    dic = {'A':'Rome','B':'Japan','C':'EUA'}
    df = pd.DataFrame({'A': ['Rome', 'Rome', 'Milan'],
    'B': ['Japan', 'Italy', 'Japan'],
    'C': ['EUA', 'Italy', 'Japan'],
    'D': [1,2,3]
    })
    df[df[list(dic)].eq(dic).all(1)]

    producción:

     A B C D
    0 Rome Japan EUA 1

    No hay comentarios:

    Publicar un comentario

    Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

    Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...