Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

82
Vistas
Filtrado de un índice múltiple
C1 C2 C3 C4
A 12 Cierto 89
9 Falso 77
5 Cierto 23
B 9 Cierto 45
5 Cierto 45
2 Falso 78
C 11 Cierto 10
8 Falso 08
12 Falso 09

C1 y C2 son el índice múltiple. Espero obtener un resultado que me dé solo valores en C1 que tengan valores inferiores a 10 y mayores o iguales a 10 en C2.

Entonces, en la tabla anterior, C1 - B debería ir, con el resultado final debería verse así:

C1 C2 C3 C4
A 12 Cierto 89
9 Falso 77
5 Cierto 23
C 11 Cierto 10
8 Falso 08
12 Falso 09

Probé df.loc[(df.C2 < 10 ) & (df.C2 >= 10)] pero esto no funcionó.

También probé:

filtro1 = df.index.get_level_values('C2') < 10 filtro2 = df.index.get_level_values('C2') >= 10

df.iloc[filtro1 y filtro2]

Lo cual vi sugerido en otra publicación que tampoco funcionó. ¿Alguien sabe como resolver esto? Gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Use GroupBy.transform con GroupBy.any para probar al menos una coincidencia de condición por grupo, por lo que es posible el último filtro por m DataFrame:

 filter1 = df.index.get_level_values('C2') < 10 filter2 = df.index.get_level_values('C2') >= 10 m = (df.assign(filter1= filter1, filter2=filter2) .groupby(level=0)[['filter1','filter2']] .transform('any')) print (m) filter1 filter2 C1 C2 A 12 True True 9 True True 5 True True B 9 True False 5 True False 2 True False C 11 True True 8 True True 12 True True

 df = df[m.filter1 & m.filter2] print (df) C3 C4 C1 C2 A 12 True 89 9 False 77 5 True 23 C 11 True 10 8 False 8 12 False 9

Solución alternativa:

 filter1 = df.index.get_level_values('C2') < 10 filter2 = df.index.get_level_values('C2') >= 10 lvl1 = df.index[filter1].remove_unused_levels().levels[0] lvl2 = df.index[filter2].remove_unused_levels().levels[0] df1 = df.loc[set(lvl1).intersection(lvl2)] print (df1) C3 C4 C1 C2 A 12 True 89 9 False 77 5 True 23 C 11 True 10 8 False 8 12 False 9
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda