在XArray中使用非索引坐标进行联接

时间:2018-10-03 11:23:17

标签: python-xarray

我正在尝试在xarray中执行“ join”,但是在其中一项上使用了非索引坐标。我认为这应该不太困难,但是我一直在旋转。

我有一个在'a'上索引的数据集和一个在'b'上的坐标,以及一个在'b'上索引的DataArray:

In [17]: ds=xr.Dataset(dict(a=(('x'),np.random.rand(10))), coords=dict(b=(('x'),list(range(10)))))

In [18]: ds
Out[18]:
<xarray.Dataset>
Dimensions:  (x: 10)
Coordinates:
    b        (x) int64 0 1 2 3 4 5 6 7 8 9
Dimensions without coordinates: x
Data variables:
    a        (x) float64 0.3634 0.2132 0.6945 0.5359 0.1053 0.07045 0.5945 ...

In [19]: da=xr.DataArray(np.random.rand(10), dims=('b',), coords=dict(b=(('b'),list(range(10)))))

In [20]: da
Out[20]:
<xarray.DataArray (b: 10)>
array([0.796987, 0.275992, 0.747882, 0.240374, 0.435143, 0.285271, 0.753582,
       0.556038, 0.365889, 0.434844])
Coordinates:
  * b        (b) int64 0 1 2 3 4 5 6 7 8 9

是否可以通过加入等于da的{​​{1}}来将ds.b添加到数据集中吗?

这在某种程度上与Join along a non-coordinate dimension in xarray有关,但是我不想做任何杂技表演,最终结果应该以{{1​​}}而不是da.b

为准

谢谢!

编辑:按照@DSM的要求,输出为:

'a'

Edit2:这是带有字符串键的示例答案,其中'b'仅具有键的子集。 (尽管其他对齐方式可能会有所帮助,但我认为<xarray.Dataset> Dimensions: (x: 10) Coordinates: b (x) int64 0 1 2 3 4 5 6 7 8 9 Dimensions without coordinates: x Data variables: a (x) float64 0.3634 0.2132 0.6945 0.5359 0.1053 0.07045 0.5945 ... da (x) float64 0.796987, 0.275992, 0.747882, 0.240374, 0.435143 ... 有一个子集时,这种方法不起作用)

ds

1 个答案:

答案 0 :(得分:1)

如果您提供一个DataArray而不是索引器的列表/向量,则该数组将被重塑为索引器的坐标:

In [5]: da.sel(b=ds.b)
Out[5]:
<xarray.DataArray (x: 10)>
array([0.327058, 0.904678, 0.455166, 0.67915 , 0.426856, 0.295434, 0.272206,
       0.630101, 0.447915, 0.157343])
Coordinates:
    b        (x) int64 0 1 2 3 4 5 6 7 8 9
Dimensions without coordinates: x

您可以在分配中使用它来在da上加入ds.b

In [6]: ds['da'] = da.sel(b=ds.b)

In [7]: ds
Out[7]:
<xarray.Dataset>
Dimensions:  (x: 10)
Coordinates:
    b        (x) int64 0 1 2 3 4 5 6 7 8 9
Dimensions without coordinates: x
Data variables:
    a        (x) float64 0.9338 0.9901 0.4498 0.49 0.3023 0.2622 0.03598 0.2 ...
    da       (x) float64 0.3271 0.9047 0.4552 0.6791 0.4269 0.2954 0.2722 ...

More advanced indexing上的xarray文档提供了此功能的一些很好的示例。

相关问题