如何对 xr.Dataset 的坐标和变量进行排序

kit*_*kit 8 python python-xarray

我想按Dataset字母顺序对 xarray 的坐标和变量进行排序。我尝试使用 来做到这一点ds.transpose(*sorted(ds.dims))DataArray这似乎对 中每个的坐标/尺寸进行排序Dataset,但不对其本身的坐标进行排序Dataset

例子:

>>> ds = xr.Dataset(
...     {
...         'z': (['c', 'a', 'b'], np.ones(shape=(2, 2, 2))),
...         'x': (['a', 'b', 'c'], np.zeros(shape=(2, 2, 2))),
...         'y': (['c'], [0, 1]),
...     },
...     coords={'c': [30, 31], 'a': [10, 11], 'b': [20, 21]}
... )
    
>>> ds.transpose('a', 'b', 'c')
<xarray.Dataset>
Dimensions:  (c: 2, a: 2, b: 2)
Coordinates:
  * c        (c) int64 30 31
  * a        (a) int64 10 11
  * b        (b) int64 20 21
Data variables:
    z        (a, b, c) float64 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
    x        (a, b, c) float64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
    y        (c) int64 0 1
Run Code Online (Sandbox Code Playgroud)

预期的行为是整体的坐标和尺寸xr.Dataset将排序为'a', 'b', 'c'。但是,您可以看到只有数据变量本身的维度是按此顺序排列的。

如何对数据集的坐标和变量进行排序,而不仅仅是数组维度?

非常感谢任何帮助,谢谢!

bit*_*ang 0

检查这些:

ds = xr.Dataset(
data_vars={
'z': (['c', 'a', 'b'], np.ones(shape=(2, 2, 2))),
'x': (['a', 'b', 'c'], np.zeros(shape=(2, 2, 2))),
'y': (['c'], [0, 1]),
},
coords={'c': [30, 31], 'a': [10, 11], 'b': [20, 21]}
)


df = ds.to_dataframe()
df = df.reindex(sorted(df.columns), axis=1)
print(df.to_xarray())

# <xarray.Dataset>
# Dimensions:  (a: 2, b: 2, c: 2)
# Coordinates:
#   * a        (a) int64 10 11
#   * b        (b) int64 20 21
#   * c        (c) int64 30 31
# Data variables:
#     x        (a, b, c) float64 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
#     y        (a, b, c) int32 0 1 0 1 0 1 0 1
#     z        (a, b, c) float64 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
Run Code Online (Sandbox Code Playgroud)