Tengo un marco de datos que se ve así: 1 2 3 4 5 6 7 8 9 0 2 1-1-2-3-2-1 0 1 Necesito devolver la columna donde el valor ...

2
andrew852 13 mar. 2021 a las 21:02

1 respuesta

La mejor respuesta

Solución pandas + numpy. Encuentra los cambios de letrero np.sign(df1).diff().ne(0)

df = df.replace(0,np.inf)
df1 = df.T
t = df1[np.sign(df1).diff().ne(0)[1:]]
s = (t>0)
pos = [*filter(s[0].get, s.index)]
s = (t<0)
neg = [*filter(s[0].get, s.index)]

pos:

['8']

neg:

['3']

Por cada fila:

def get_pos_neg(row):
    t = row[np.sign(row).diff().ne(0)]#[1:]
    print(t)
    s = (t>0)
    pos = [*filter(s.get, s.index)]
    s = (t<0)
    neg = [*filter(s.get, s.index)]
    return pos,neg
  
df = df.replace(0,np.inf)
df1 = df.T
df1.apply(get_pos_neg,0)
3
Pygirl 13 mar. 2021 a las 18:52