【问题标题】:Python Xarray, sort by index or dimension?Python Xarray,按索引或维度排序?
【发布时间】:2022-04-04 20:12:06
【问题描述】:

xarray 中是否有某种sort_indexsort_by_dimension 方法,很像pandas.DataFrame.sort_index(),我可以在其中按xarray.DataArray 对象的一个​​维度对其进行排序?在使用方面,我在想data_array.sort(dim="dimension_name")之类的东西。

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不,我的意思是得到一个DataArray,例如按“lon”排序。
      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 2021-11-10
        • 1970-01-01
        • 2021-01-14
        • 2021-01-11
        • 2016-09-25
        • 2016-06-21
        • 2021-05-07
        • 2011-05-21
        • 2015-08-27
        相关资源
        最近更新 更多