Python Xarray,按索引或维度排序?

5

xarray 中是否有类似于 pandas.DataFrame.sort_index()sort_index 或者 sort_by_dimension 方法,可以对 xarray.DataArray 对象的某个维度进行排序?对于使用方法,我想要像这样 data_array.sort(dim="dimension_name")

3个回答

4

我在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

0
你的意思是重新排列维度吗? 例如,使用.transpose()函数,您可以重新排序整个数据集或特定的数据数组的维度,例如:

ds.transpose('lat','lon','time')

不,我的意思是获取按“lon”排序的“DataArray”。 - Ray

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接