pkhiev:
si tengo una trama de datos de la muestra así:
>>> import pandas as pd
>>> a = [100,300,200,100,700,600,400,600]
>>> i = ["2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007"]
>>> df = pd.DataFrame(a, index = i, columns = {"gdp"})
>>> df
gdp
2000 100
2001 300
2002 200
2003 100
2004 700
2005 600
2006 400
2007 600
res=[]
Quiero iterar a través de las filas, y las condiciones son: si la fila (x + 1) - fila (x) <0 & Row (x + 2) -row (x + 1) <0 res.append (índice [x ])
Así, en este ejemplo, me gustaría tener una lista de [2001, 2004]
No estoy seguro de cómo escribir el código para esto. ¡Gracias!
Jezreel:
Yo prefiero solución no bucle, debido a un mejor rendimiento - el uso Series.shift
, por restar Series.sub
y comparar con Series.lt
menos último filtro, por boolean indexing
con DataFrame.loc
, si es necesario también el filtro por nombre de columna gdp
:
s1 = df['gdp'].shift(-1)
s2 = df['gdp'].shift(-2)
m = s1.sub(df['gdp']).lt(0) & s2.sub(s1).lt(0)
out = df.loc[m, 'gdp']
print (out)
2001 300
2004 700
Name: gdp, dtype: int64