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.

Recorriendo un dataframe de Panda para contar y ajustar una celda

Tengo un dataframe de Pandas así:

    colLabelA   colLabelB   ... colLabelZ

rowLabelA 10 0 0
specialRow 0 10 0
rowLabelB 20 0 10

rowLabelZ 0 0 20

Básicamente, solo conozco la fila llamada “specialRow”. Lo que necesito es encontrar una forma de iterar a través de todo el dataframe y verificar todas las columnas en busca de ceros (0).

Si una columna tiene solo ceros, excepto en “specialRow”, entonces es necesario convertir esa celda en cero también. De lo contrario, pasamos a la siguiente columna y verificamos esa.

Entonces, en el ejemplo anterior, solo colLabelB tiene ceros en todas las celdas excepto en “specialRow”, por lo que necesita actualizarse de la siguiente manera:

    colLabelA   colLabelB   ... colLabelZ

rowLabelA 10 0 0
specialRow 0 0 0
rowLabelB 20 0 10

rowLabelZ 0 0 20

¿Hay una forma rápida de hacer esto? Los dataframes no son enormes, pero tampoco quiero que sea demasiado lento.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma rápida y eficiente de hacer esto. Puedes usar los métodos loc e iloc del dataframe de pandas para filtrar y actualizar celdas específicas.

    Aquí tienes una forma de implementar la solución:

    # asumiendo que tu dataframe se llama df
    # y la fila en la que estás interesado se llama specialRow
    for col in df.columns:
        # omitir la columna specialRow
        if col == 'specialRow':
            continue
    
        # comprobar si todos los valores en la columna son 0, excepto specialRow
        if (df.loc[df[col] != 0, col].index != 'specialRow').all():
            # si es así, actualizar la celda specialRow a 0
            df.loc['specialRow', col] = 0
    

    Este código itera a través de cada columna en el dataframe, excepto la columna specialRow. Para cada columna, verifica si todos los valores en esa columna son 0, excepto la celda specialRow. Si ese es el caso, actualiza la celda specialRow a 0 utilizando el método loc.

    Este enfoque debería ser lo suficientemente rápido para dataframes de tamaño pequeño a mediano. Si tu dataframe es grande, es posible que necesites considerar un enfoque más optimizado.

Comments are closed.