python - 如何对 xr.Dataset 的坐标和变量进行排序
问题描述
我想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
预期的行为是整体的坐标和尺寸xr.Dataset
将被排序为'a', 'b', 'c'
。但是,您可以看到只有数据变量本身的维度是按此顺序排列的。
如何对数据集的坐标和变量进行排序,而不仅仅是数组维度?
任何帮助都非常感谢,谢谢!
解决方案
xr.Dataset.reindex_like
您可以使用和在 xarray 中执行此操作xr.Dataset.reindex
。如果您有另一个要匹配的对象,前者会很有帮助。
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]}
)
current_indexes = ds.indexes
desired_order = ['a', 'b', 'c']
reordered_indexes = {index_name: current_indexes[index_name] for index_name in desired_order}
reordered_ds = ds.reindex(reordered_indexes)
>>> ds
<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 (c, a, b) 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
>>> reordered_ds
<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:
z (c, a, b) 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
推荐阅读
- node.js - 使用 webdriverio 测试本机应用程序时发送 HTTP POST
- kubernetes - istio 侧车未创建
- hadoop - 为什么在尝试下载 HDP 时出现“访问受限”?
- sql - SQL Server - 选择用户最频繁记录的列的值
- kdb - 在 kdb+ 上获取开始日期和结束日期并计算这些日期之间有多少个星期日落在每月 1 日的函数
- java - 使用 CompletableFuture 执行单个或多个 Callables 并避免阻塞
- jasmine - 如何为每次测试启动和停止量角器驱动程序
- amazon-s3 - AWS Glue ETL“Failed to delete key: target_folder/_temporary”由 S3 异常“请降低您的请求率”引起
- angularjs - 从过滤对象数组的属性中设置 ng-model
- extjs - 分机谷歌日历