在 xarray 中查找 table?

Lookup table in xarray?

所以我想合并 2 个数据集,1 个是来自 rioxarray.open_rasterio() 的单波段栅格数据集,另一个是查找 table,索引暗淡 'mukey' .沿 'mukey' 的坐标对应于查找 table 中的 'mukey' 个索引值。期望的结果是一个具有与栅格数据集相同的 x 和 y 坐标的数据集,变量 'n' 和 'K' 的值通过在 'mukey' 上合并来填充。如果您熟悉 ArcGIS,this is the analogous operation.

xr.merge() 和 assign() 似乎不太执行此操作,并且通过转换为 pandas 或 numpy 作弊会在我的 32GB 机器上遇到内存问题。 xarray 是否为这个简单的用例提供任何支持?谢谢,

data = (np.abs(np.random.randn(12000000))).astype(np.int32).reshape(1,4000,3000)
raster = xr.DataArray(data,dims=['band','y','x'],coords=[[1],np.arange(4000),np.arange(3000)])
raster = raster.to_dataset(name='mukey')
raster

lookup = pd.DataFrame({'mukey':list(range(10)),'n':np.random.randn(10),'K':np.random.randn(10)*2}).set_index('mukey').to_xarray()
lookup

您正在寻找 xarray 的 advanced indexing with DataArrays 功能。

您可以提供 DataArray 作为 DataArray.selDataset.sel 的关键字参数 - 这将根据索引数组的值沿索引数组的维度重塑索引数组索引数组。我认为这正是您在“查找 table”中寻找的内容。

你的情况:

lookup.sel(mukey=raster.mukey)