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.

Cómo comparar múltiples columnas y producir valores en una sola columna nueva utilizando la función Apply en Pandas.

Usando la función Apply en Pandas, quiero comparar varias columnas en un dataframe para ver si sus valores son más altos o más bajos que un Valor Numérico. Luego, basado en el resultado de la condición si es mayor o menor, imprimiré un Valor de Cadena en una Nueva Columna. Soy capaz de hacer esto cuando comparo 1 columna con el Valor Numérico, pero no con varias columnas. ¿Cómo podría hacer esto con varias columnas? A continuación se muestra el ejemplo que estoy usando. El ejemplo funciona bien para 1 columna, pero no puedo hacerlo para varias columnas. Además de “Columna C”, que estoy comparando con el Valor Numérico “99”, también quiero comparar “Columnas B” y “Columnas D” con el Valor Numérico “99”.

(Nota: No quiero usar el método de función Lambda)

El código está a continuación,

import pandas as pd
import numpy as np
data = { 'a': [1, 15, 27, 399], 
         'b': [2, 30, 45, 60],
         'c': [100,200, 3, 78],
         'd': [4, 300, 400, 500]
         }

dfgrass = pd.DataFrame(data)
def judge(x):
    if x > 99:
        return 'bingo'
    elif x < 99:
        return 'jack'

dfgrass['e'] = dfgrass['c'].apply(judge)

print(dfgrass)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar varias columnas en un DataFrame utilizando la función apply en Pandas y obtener un valor de cadena basado en la comparación, puede modificar el código anterior de la siguiente manera:

    import pandas as pd
    import numpy as np
    
    data = {'a': [1, 15, 27, 399],
            'b': [2, 30, 45, 60],
            'c': [100, 200, 3, 78],
            'd': [4, 300, 400, 500]}
    
    df = pd.DataFrame(data)
    
    def judge(row):
        if row['b'] > 99 or row['c'] > 99 or row['d'] > 99:
            return 'bingo'
        else:
            return 'jack'
    
    df['e'] = df.apply(judge, axis=1)
    
    print(df)
    

    En este código modificado, definimos una nueva función judge() que toma una fila del DataFrame como entrada y utiliza declaraciones if-else para verificar si los valores de las columnas ‘b’, ‘c’ y ‘d’ son mayores que 99. Si alguna de estas condiciones es verdadera, la función devuelve ‘bingo’; de lo contrario, devuelve ‘jack’.

    Luego utilizamos la función apply con axis=1 para aplicar esta función a cada fila del DataFrame y almacenar el resultado en una nueva columna ‘e’.

    Tenga en cuenta que utilizamos el parámetro row de la función judge() para acceder a los valores en las columnas de interés. Además, no utilizamos los operadores > o < directamente en la función; esto nos permite verificar múltiples condiciones utilizando el operador or y hace que el código sea más conciso.

    En general, este código debería producir un DataFrame que compara los valores en las columnas ‘b’, ‘c’ y ‘d’ con el valor numérico 99 y produce un valor de cadena en la columna ‘e’ basado en el resultado de la comparación.

Comments are closed.