Означает ли xarray избегать традиционных объединений таблиц, что легко делает Pandas, или я просто не получаю его? Вот простой пример с «левым» набором данных (ds
) и «правым» набором данных (other
), который я хотел бы объединить в левом соединении:
import xarray as xr
ds = xr.Dataset({"a": ("index", list("xyzxyzxy"))})
other = xr.Dataset({"a": list("xz"), "b": ("a", [1, 2])})
При попытке ds.merge(other)
, xarray предполагает, что ему нужно больше информации, но как мне сказать, что "a" не должно быть координатой в результате?
MergeError: unable to determine if these variables should be coordinates or not in the merged result: {'a'}
Желаемый результат - это то, чего я добиваюсь с помощью диверсии через Pandas:
>>> ds = ds.to_dataframe()
>>> other = other.to_dataframe()
>>> ds.join(other, on="a").to_xarray()
<xarray.Dataset>
Dimensions: (index: 8)
Coordinates:
* index (index) int64 0 1 2 3 4 5 6 7
Data variables:
a (index) object 'x' 'y' 'z' 'x' 'y' 'z' 'x' 'y'
b (index) float64 1.0 nan 2.0 1.0 nan 2.0 1.0 nan
непринятые ответы
>>> ds.set_coords("a").merge(other)
<xarray.Dataset>
Dimensions: (a: 2)
Coordinates:
* a (a) <U1 'x' 'z'
Data variables:
b (a) int64 1 2
>>> ds.set_coords("a").merge(other, join="left")
<xarray.Dataset>
Dimensions: (a: 2)
Coordinates:
* a (a) <U1 'x' 'z'
Data variables:
b (a) int64 1 2