将xarray数据集中的维度从点坐标更改为lat-lon



我有这个数据集,其中包含尽可能多的坐标站、纬度、经度和时间。现在数据集使用(站,时间(作为维度,但我希望它使用(lat,lon,时间(。

我在网上找到了如何交换维度,但我只能发现它适用于交换一个维度。

有什么建议吗?

<xarray.Dataset>
Dimensions:     (stations: 11, time: 7320)
Coordinates:
* stations    (stations) int64 11425 11426 11427 11428 ... 11433 11434 11435
lat         (stations) float64 39.54 39.36 39.24 39.07 ... 38.07 37.9 37.81
lon         (stations) float64 -74.25 -74.4 -74.6 ... -75.19 -75.34 -75.51
* time        (time) datetime64[ns] 2010-02-01 ... 2010-02-06T01:59:00
Data variables:
waterlevel  (time, stations) float64 0.0002405 0.0002313 ... -0.01266

您可以使用set_index使station坐标成为latlon坐标的MultiIndex(如本文所述(。在第二步中,您可以拆下MultiIndex,使latlon成为数据集维度。但是,请注意,这将放大数据集的大小(除非桩号已经在常规网格上(,从而用NaN值填充没有桩号的网格点。对于许多应用程序,使station维度成为latlon的MultiIndex就足够了。

import numpy as np
import pandas as pd
import xarray as xr
ds = xr.Dataset(
data_vars={"waterlevels": (("station", "time"), np.random.rand(5, 20))},
coords={
"station": ("station", ["a", "b", "c", "d", "e"]),
"lon": ("station", np.random.rand(5)),
"lat": ("station", np.random.rand(5)),
"time": pd.date_range(start="10-05-2021", periods=20, freq="d"),
},
)
# Rename the station coordinate so that you don't overwrite it
ds = ds.rename_vars({"station": "station_id"})
# Create MultiIndex coordinate
ds_multiindex = ds.set_index(
station=["lat", "lon"]
)
# Unstack the MultiIndex
ds_multiindex.unstack()

最新更新