如何通过迭代行选择在大熊猫匹配三行条件数据帧?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章