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.

Suma condicional de columnas de un dataframe en Python

Interesado en saber si es posible reproducir la siguiente lógica en Python, en una línea, sin crear una función.

Usando este df:

df = pd.DataFrame({'x': [10, 22, 31, 43, 57, 99, 65, 74, 88],
              'y':[10, 50, 31, 66, 57, 199, 75, 80, 100]})

que se ve así:

    x    y
0  10   10
1  22   50
2  31   31
3  43   66
4  57   57
5  99  199
6  65   75
7  74   80
8  88  100

Para producir la siguiente salida:

   x    y    z
0  10   10  10
1  22   50  28
2  31   31  31
3  43   66  23
4  57   57  57
5  99  199 100
6  65   75  10
7  74   80  6
8  88  100 12

He intentado lo siguiente, pero esto retorna un error de sintaxis:

z = if(y - x) == 0: a else: (y - x)

Aprecio que hay preguntas similares, pero no he encontrado nada que sea aplicable a mi caso de uso o que tenga una explicación suficiente para que pueda reutilizar el código.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible reproducir la lógica en Python en una línea, sin crear una función, usando el siguiente código:

    df['z'] = np.where((df['y'] - df['x']) == 0, df['a'], (df['y'] - df['x']))
    

    Esto utiliza la función np.where de la biblioteca numpy, que recibe tres argumentos:

    1. La condición a evaluar.
    2. El valor que se asignará al arreglo de salida cuando la condición sea verdadera.
    3. El valor que se asignará al arreglo de salida cuando la condición sea falsa.

    En este caso, la condición es (df['y'] - df['x']) == 0, que evalúa Verdadero cuando la diferencia entre y y x es cero. Si esta condición es verdadera, se asigna el valor de a al arreglo de salida. Si la condición es falsa, se asigna la diferencia entre y y x al arreglo de salida. El resultado se almacena en la columna z del dataframe.

Comments are closed.