Pandas:选择连续行,其中选定范围内的第一行和最后一行构成表达式

2024-06-17 19:05:50 发布

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

我的数据框如下所示:

    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
  • 该范围内每行的温度减去露点温度小于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行不包括在内,因为它不满足第三个条件

我知道我可以用itertuples来实现这一点,但我想知道是否有可能以更快的方式实现这一点。我一直在考虑类似于this solution的东西,但我不确定如何计算第二个条件范围内的第一行和最后一行。问题是压力读数没有固定的间隔,因此范围可能有很多行。有人能就如何进行此查询提供建议吗


Tags: 数据pttype方式温度条件tempheight
1条回答
网友
1楼 · 发布于 2024-06-17 19:05:50

核对

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

相关问题 更多 >