我有一个数据框 radio 探空仪
,其中包含大量 radio 探空仪数据。现在正在完成数百个 radio 探空仪,所有 radio 探空仪都具有唯一的时间戳,因此数据帧具有日期时间索引。我想要的是基于特定压力水平的变量(温度、压力等)的时间序列。因此,基本上每个 radio 探空仪都应该为我提供特定压力水平下其他变量的值。出现的问题是压力区间不均匀,并且以 2 位小数表示。此外,每个 radio 探空仪都有不同的压力间隔,因为测量是每秒进行一次,而不是基于压力。我所做的如下:
x = radiosondes[(radiosondes['Press'] >= 500) & (radiosondes['Press'] <= 501)]
现在这条线给了我一些正确的数据,但并不完全像你在下面的结果中看到的那样:一些时间戳被多次包含,因为它们有多个测量值,其中压力在 500 到 501 HPa 之间。
Press GeopHgt Temp RH PO3 GPSHgt O3
datetime
2019-09-21 05:00:00 500.86 5263 237.4 79 NaN 5279.0 NaN
2019-09-21 05:00:00 500.49 5268 237.4 78 NaN 5285.0 NaN
2019-09-21 05:00:00 500.12 5273 237.3 76 NaN 5290.0 NaN
2019-09-22 04:00:00 500.64 5359 243.5 54 NaN 5369.0 NaN
2019-09-22 04:00:00 500.14 5368 243.4 54 NaN 5378.0 NaN
... ... ... ... .. ... ... ..
2020-10-01 11:00:00 500.68 5443 244.6 63 NaN 5460.0 NaN
2020-10-01 11:00:00 500.29 5449 244.6 63 NaN 5466.0 NaN
2020-10-01 14:00:00 500.92 5465 245.1 29 NaN 5485.0 NaN
2020-10-01 14:00:00 500.55 5469 245.1 29 NaN 5490.0 NaN
2020-10-01 14:00:00 500.16 5474 245.1 28 NaN 5496.0 NaN
所以我想要的是每个 radio 探空仪在新时间序列中只包含一次。我想选择压力最接近 500 的行。因此结果将类似于:
Press GeopHgt Temp RH PO3 GPSHgt O3
datetime
2019-09-21 05:00:00 500.12 5273 237.3 76 NaN 5290.0 NaN
2019-09-22 04:00:00 500.14 5368 243.4 54 NaN 5378.0 NaN
... ... ... ... .. ... ... ..
2020-10-01 11:00:00 500.29 5449 244.6 63 NaN 5466.0 NaN
2020-10-01 14:00:00 500.16 5474 245.1 28 NaN 5496.0 NaN
希望大家能清楚我的意思。预先非常感谢!
最佳答案
要实现此目的,您可以执行以下操作: 如果你的数据框是x, 考虑到您寻找尽可能接近 500 的压力,因此它等于 500 到 501 之间的最小压力:
print(x.loc[x.groupby("datetime")["Press"].idxmin()])
这将为每个日期时间组保留一行,压力最小,因此最接近 500。
关于python - 根据最接近的值选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66369492/