问题描述
我有以下数据框 df1
,它实际上表示带有坐标的网格:
latitude longitude level time
0 40.008606 20.114280 880.0 3/31/1981 5:00
1 40.008606 20.114280 880.0 3/31/1981 6:00
2 40.008606 20.114280 880.0 3/31/1981 7:00
3 40.008606 20.114280 880.0 3/31/1981 8:00
4 39.665283 20.097115 855.0 3/31/1981 5:00
5 39.665283 20.097115 855.0 3/31/1981 6:00
6 39.665283 20.097115 855.0 3/31/1981 7:00
7 39.665283 20.097115 855.0 3/31/1981 8:00
8 39.665283 19.911120 860.0 3/31/1981 5:00
9 39.665283 19.911120 860.0 3/31/1981 6:00
10 39.665283 19.911120 860.0 3/31/1981 7:00
11 39.665283 19.911120 860.0 3/31/1981 8:00
我想标准化 - 将 4d 天气数据插入到网格上方,而 latitude
、longitude
、level
和 time
是维度。分辨率为 0.25deg latitude
和 longitude
以及分辨率为 25mbar level
的值在以下数据框 df2
中:
latitude level longitude time t
0 40.00 875.0 20.00 3/31/1981 5:00 7.622246
1 40.00 875.0 20.00 3/31/1981 6:00 8.832257
2 40.00 875.0 20.00 3/31/1981 7:00 1.107310
3 40.00 875.0 20.00 3/31/1981 8:00 11.144372
4 40.00 900.0 20.00 3/31/1981 5:00 8.736878
.. ... ... ... ... ...
66 40.25 900.0 20.25 3/31/1981 8:00 6.014550
67 40.25 850.0 20.25 3/31/1981 5:00 6.729872
68 40.25 850.0 20.25 3/31/1981 6:00 8.098390
69 40.25 850.0 20.25 3/31/1981 7:00 5.234497
70 40.25 850.0 20.25 3/31/1981 8:00 5.968091
整个数据框位于 this link 上。所以,我需要的是数据帧 t
的列 df2
以 df1
中的新列的形式在数据帧 df1
上展开标准化。希望期望的输出是明确的。
到目前为止,我正在考虑 this post 解决方案,但它对所有维度使用相同的数据类型,这里不是这种情况。我设法找到最近的 latitude
,longitude
,level
of df2
并将这些列添加到 df1 然后使用:
rslt= pd.merge(df1,df2,on=["latitude","level","longitude"],how="left")
但这只会得到最近的成员,而不是平滑的,以上维度的内插值。
对解决此问题的任何帮助表示赞赏。
解决方法
我建议您将数据转换为 xarray 数据集,然后使用其多维插值功能:
http://xarray.pydata.org/en/stable/user-guide/interpolation.html#multi-dimensional-interpolation