标准化平滑维度数据框

问题描述

我有以下数据框 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 天气数据插入到网格上方,而 latitudelongitudeleveltime 是维度。分辨率为 0.25deg latitudelongitude 以及分辨率为 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 的列 df2df1 中的新列的形式在数据帧 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