在 xarray
中是否有类似于 pandas.DataFrame.sort_index()
的 sort_index
或者 sort_by_dimension
方法,可以对 xarray.DataArray
对象的某个维度进行排序?对于使用方法,我想要像这样 data_array.sort(dim="dimension_name")
。
在 xarray
中是否有类似于 pandas.DataFrame.sort_index()
的 sort_index
或者 sort_by_dimension
方法,可以对 xarray.DataArray
对象的某个维度进行排序?对于使用方法,我想要像这样 data_array.sort(dim="dimension_name")
。
我在xarray
中找不到一个好的方法来实现这个功能,所以我通过使用我想要排序的坐标值的排序结果来创建了一个新数组:da_sorted=da.loc[{'lon':sorted(da.coords['lon'].values)}]
以下是一个使用测试数据的更大的示例,展示了实际情况:
import numpy as np
import xarray as xr
data = np.random.rand(2, 3)
lat = [47, 45]
lon = [-118, -122, -120]
da = xr.DataArray(data, coords=[lat, lon], dims=['lat', 'lon'])
>>>> da
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.16118 , 0.215621, 0.599749],
[ 0.144778, 0.984167, 0.416469]])
Coordinates:
* lat (lat) int64 47 45
* lon (lon) int64 -118 -122 -120,
da_sorted = da.loc[{'lon':sorted(da.coords['lon'].values)}]
>>>> da_sorted
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.215621, 0.599749, 0.16118 ],
[ 0.984167, 0.416469, 0.144778]])
Coordinates:
* lat (lat) int64 47 45
* lon (lon) int64 -122 -120 -118
.transpose()
函数,您可以重新排序整个数据集或特定的数据数组的维度,例如:
ds.transpose('lat','lon','time')
xarray
现在有一个内置的方法来执行此任务,可以使用 .sortby()
轻松完成 https://xarray.pydata.org/en/stable/generated/xarray.DataArray.sortby.html
@Kyle Heuton 发布的代码现在变成了:
import numpy as np
import xarray as xr
data = np.random.rand(2, 3)
lat = [47, 45]
lon = [-118, -122, -120]
da = xr.DataArray(data, coords=[lat, lon], dims=['lat', 'lon'])
>>>> da
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.16118 , 0.215621, 0.599749],
[ 0.144778, 0.984167, 0.416469]])
Coordinates:
* lat (lat) int64 47 45
* lon (lon) int64 -118 -122 -120,
da_sorted = da.sortby(da.lon)
>>>> da_sorted
<xarray.DataArray (lat: 2, lon: 3)>
array([[ 0.215621, 0.599749, 0.16118 ],
[ 0.984167, 0.416469, 0.144778]])
Coordinates:
* lat (lat) int64 47 45
* lon (lon) int64 -122 -120 -118