我有这个数据集,其中包含尽可能多的坐标站、纬度、经度和时间。现在数据集使用(站,时间(作为维度,但我希望它使用(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
坐标成为lat
和lon
坐标的MultiIndex(如本文所述(。在第二步中,您可以拆下MultiIndex,使lat
和lon
成为数据集维度。但是,请注意,这将放大数据集的大小(除非桩号已经在常规网格上(,从而用NaN值填充没有桩号的网格点。对于许多应用程序,使station
维度成为lat
和lon
的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()