我的数据帧如下所示:
Type Pressure Height Temp Dew_pt WindDir WindSpd
0 5 10002 158 22.8 20.2 33 2
1 4 10000 159 22.8 20.2 33 2
2 5 9947 209 22.1 20.0 37 2
3 5 9851 295 21.2 19.8 39 3
4 5 9711 419 21.0 18.6 42 2
5 5 9530 581 21.1 18.4 318 2
6 5 9314 776 20.8 17.6 281 7
7 4 9250 836 20.9 20.0 277 8
8 5 9079 999 21.0 20.5 266 12
9 5 8823 1248 20.1 20.0 253 17
10 5 8539 1531 18.1 16.0 247 21
我想选择连续行的第一个范围,这样
- 范围内每行的压力至少比索引0处的压力低200
- 该范围内第一排和最后一排的压力差至少为200
- 对于该范围内的每一行,Temp减去Dew_pt小于1.5
此查询将返回
7 4 9250 836 20.9 20.0 277 8
8 5 9079 999 21.0 20.5 266 12
9 5 8823 1248 20.1 20.0 253 17
行10将不被包括在内,因为它不满足第三条件。
我知道我可以用迭代来做这件事,但我想知道是否有可能用更快的方式来做。我一直在考虑这样的解决方案,但我不知道如何评估第二个条件范围内的第一行和最后一行。问题是压力读数没有固定的间隔,所以范围可能有很多行长。有人能就如何进行此查询提出建议吗?
使用检查
cond1 = df.Pressure.sub(df.Pressure.iloc[0])<=-200
cond2 = (df.Temp-df.Dew_pt)<1.5
s = (~(cond1 & cond2)).cumsum()
out = df.groupby(s).Pressure.agg(np.ptp)
out = df[s.isin(out[out>200].index)].iloc[1:,]
Out[362]:
Type Pressure Height Temp Dew_pt WindDir WindSpd
7 4 9250 836 20.9 20.0 277 8
8 5 9079 999 21.0 20.5 266 12
9 5 8823 1248 20.1 20.0 253 17