三列に一致する条件でパンダのデータフレームで選択した行を反復処理する方法?

pkhiev:

私はこのようなサンプルのデータフレームを持っている場合:

>>> 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=[]

私は、行を反復処理する、及び条件は、もし行(X + 1) - 行(X)<0の行(X + 2)行×(X + 1)<0 res.append(指数[X ])

したがって、この例では、私は[2001、2004]のリストになるだろう

私はこのためのコードを記述するかどうかはわかりません。ありがとうございました!

エズレル:

私はより良いパフォーマンスので、非ループ・ソリューションを好む-使用Series.shiftによって減算Series.subとで比較するSeries.ltことにより、以下、最後のフィルタのためにboolean indexingDataFrame.loc、もし列名でも必要性フィルタ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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=293040&siteId=1