如何在条件匹配三行的情况下迭代数据帧中的选定行?

2024-04-25 13:11:28 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这样一个示例数据帧:

>>> 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]的列表

我不知道该如何为此编写代码。谢谢大家!


Tags: columns数据importlt示例dataframepandasdf
1条回答
网友
1楼 · 发布于 2024-04-25 13:11:28

我更喜欢非循环解决方案,因为性能更好-使用^{},减去^{},与^{}相比更少,最后一个过滤器使用^{}^{},如果需要还按列名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

相关问题 更多 >