根据不均匀分布的观测值获取特定高度的值
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 等等。
.
我认为它应该是某种形式的插值,但不确定什么是最好的方法。
使用 python、numpy 和 [=25= 的最佳实践是什么]?
reindex
& interpolate
首先我们将 altitude
设置为索引,这样我们就可以为每个 "whole" 高度数字重新编制索引。
然后我们在测量之间插入温度:
注意,在这种情况下我们无法计算测量值 100
,因为高度 76
是 NaN
:
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
是插值的
输入数据如下所示(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 等等。 . 我认为它应该是某种形式的插值,但不确定什么是最好的方法。
使用 python、numpy 和 [=25= 的最佳实践是什么]?
reindex
& interpolate
首先我们将 altitude
设置为索引,这样我们就可以为每个 "whole" 高度数字重新编制索引。
然后我们在测量之间插入温度:
注意,在这种情况下我们无法计算测量值 100
,因为高度 76
是 NaN
:
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
是插值的