我的数据看起来是这样的:
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
我想选择第一个连续行的范围,这样
此查询将返回
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行将不包括在内,因为它不满足第三个条件。
我知道我可以用迭代来完成这个任务,但是我想知道是否有可能以一种更快的方式来完成这个任务。我一直在考虑类似于this solution的东西,但我不知道如何为第二个条件评估范围内的第一行和最后一行。问题是压力读数没有固定的间隔,所以可能有很多行长。有人能建议如何进行这个查询吗?
发布于 2021-07-18 15:38:20
查证
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
https://stackoverflow.com/questions/68429792
复制相似问题