如果我有一个样本数据帧是这样的:
>>> 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 indexing
以DataFrame.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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句