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=[]
我想遍历行,条件是: if row(x+1) - row(x) <0 & row (x+2)-row(x+1)<0 res.append(index[x ])
所以在这个例子中,我会得到一个 [2001, 2004] 的列表
我不确定如何为此编写代码。谢谢!
解决方案
我更喜欢非循环解决方案,因为更好的性能 - 使用Series.shift
,减去Series.sub
和比较Series.lt
更少,最后过滤boolean indexing
with 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
推荐阅读
- javascript - 如何解决 CSS 中的左侧菜单扩展跳跃问题?
- python - 尝试在 Python 中使用 calcHist 计算 3 通道颜色直方图时出现“断言失败”错误
- docker - 如何使用 docker-compose 启动带有卷的主机 docker 容器
- c# - 对于运行时数据库上下文,我是否需要 OnModelCreating 中的实体数据模型?
- java - 子类如何使用超类的比较器?
- javascript - KeyboardDatePicker 将日期和月份更改为全长
- javascript - “范围的坐标超出了工作表的尺寸。” 排序时出错
- c# - C# 将日期舍入到一个月的 10 号、20 号或 30 号
- c# - 从代码检查并创建丢失的游戏对象(不是在游戏过程中)
- node.js - next.js 错误:错误:> 由于 webpack 错误,构建失败