Pandas:选择连续的行,其中所选范围中的第一行和最后一行组成一个表达式



我的数据帧如下所示:

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

最新更新