根据不均匀分布的观测值获取特定高度的值

Get values at specific altitudes based on unevenly distributed observations

输入数据如下所示(pandas DataFrame):

     index altitude temperature
0   669084     76.0     NaN
1   669085    190.0   -70.0
2   669086    384.0  -290.0
3   669087    693.0  -430.0
4   669088    883.0  -290.0
5   669089    963.0  -250.0
6   669090    989.0  -250.0
7   669091   1259.0  -380.0
.....

它本质上是单次垂直探测的结果。测量是在 "random" 个海拔高度进行的,我需要计算特定海拔高度的值,例如 100m、300m、500m、1000m 等等。 . 我认为它应该是某种形式的插值,但不确定什么是最好的方法。

使用 pythonnumpy[=25= 的最佳实践是什么]?

reindex & interpolate

首先我们将 altitude 设置为索引,这样我们就可以为每个 "whole" 高度数字重新编制索引。

然后我们在测量之间插入温度:

注意,在这种情况下我们无法计算测量值 100,因为高度 76NaN:

min_alt = df['altitude'].min().astype(int)
max_alt = df['altitude'].max().astype(int)+1

newdf = df.set_index('altitude').reindex(range(min_alt, max_alt)).reset_index()

newdf['index'] = newdf['index'].ffill()

newdf['temperature'].interpolate(inplace=True)
newdf['temperature'].interpolate(limit_direction='backward', inplace=True)

输出

      altitude     index  temperature
0           76  669084.0   -70.000000
1           77  669084.0   -70.000000
2           78  669084.0   -70.000000
3           79  669084.0   -70.000000
4           80  669084.0   -70.000000
...        ...       ...          ...
1179      1255  669090.0  -378.074074
1180      1256  669090.0  -378.555556
1181      1257  669090.0  -379.037037
1182      1258  669090.0  -379.518519
1183      1259  669091.0  -380.000000

[1184 rows x 3 columns]

那么如果我们检查 300m、500m 和 1000m 处的值:

newdf.query('altitude.isin([300,500,100])')

输出

     altitude     index  temperature
224       300  669085.0  -194.742268
424       500  669086.0  -342.556634
924      1000  669090.0  -255.296296

我们可以看到temperature是插值的