Rolling Conditional Pandas DataFrame Column

¿Cómo podría escribir una condición de balanceo que se aplique a una columna en pandas?

import pandas as pd import numpy as np lst = np.random.random_integers(low = -10, high = 10, size = 10) lst2 = np.random.random_integers(low = -10, high = 10, size = 10) #lst = [ -2 10 -10 -6 4 2 -5 4 9 3] #lst2 = [-7 5 6 -4 7 1 -4 -6 -1 -4] df = pandas.DataFrame({'a' : lst, 'b' : lst2}) 

Dado un dataframe, es decir, ‘df’, quiero crear una columna ‘C’ tal que muestre Verdadero si el elemento en a> 0 y b> 0 o Falso si a <0 y b <0.

Para las filas que no cumplen con esta condición, quiero pasar la entrada de la fila anterior a la actual (es decir, si la fila anterior tiene un valor ‘Verdadero’ pero no cumple las condiciones especificadas, debería tener el valor ‘Verdadero’ .)

¿Cómo puedo hacer esto?

Pregunta de seguimiento: ¿Cómo haría esto para las condiciones a> 1 y b> 1 devuelve True o a <-1 y b <-1 devuelve False?

Prefiero hacer esto con un poco mathemagic en los signos.

 i = np.sign(df.a) j = np.sign(df.b) i = i.mask(i != j).ffill() i >= 0 # for your `lst` and `lst2` input 0 False 1 True 2 True 3 False 4 True 5 True 6 False 7 False 8 False 9 False Name: a, dtype: bool 

Siempre que no tenga que preocuparse por los desbordamientos de enteros, esto funciona bien.

 i = np.sign(df.a) j = np.sign(df.b) i.mask(i != j).ffill().ge(0)