微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 xarray 数据集中将维度从点坐标更改为纬度

如何解决在 xarray 数据集中将维度从点坐标更改为纬度

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

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

有什么关于如何做到这一点的建议吗?

<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

解决方法

您可以使用 station 使 lat 坐标成为 lonset_index 坐标的 MultiIndex(如 here 所述)。在第二步中,您可以拆开 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","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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。