首页 > 解决方案 > 如何在条件匹配三行的情况下遍历熊猫数据框中的选定行?

问题描述

如果我有这样的示例数据框:

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

我想遍历行,条件是: if row(x+1) - row(x) <0 & row (x+2)-row(x+1)<0 res.append(index[x ])

所以在这个例子中,我会得到一个 [2001, 2004] 的列表

我不确定如何为此编写代码。谢谢!

标签: pythonpandas

解决方案


我更喜欢非循环解决方案,因为更好的性能 - 使用Series.shift,减去Series.sub和比较Series.lt更少,最后过滤boolean indexingwith 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

推荐阅读