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'。但是,您可以看到只有数据变量本身的维度是按此顺序排列的。
如何对数据集的坐标和变量进行排序,而不仅仅是数组维度?
非常感谢任何帮助,谢谢!
检查这些:
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)