说我有以下二维数组
>>> import numpy as np
>>> budgets = np.array([
[np.nan, 450.],
[500. , 100.],
[np.nan, 900.],
])
其值的位置如下
>>> coords = [
('name' , ['Jack_teen' , 'John_adult', 'John_teen']), # over rows
('hobby', ['books', 'bicyle']), # over columns
]
使用xarray我可以创建一个二维标签数组,做
>>> import xarray as xr
>>> x = xr.DataArray(budgets, coords=coords)
因此,当约翰十几岁的时候,他不喜欢书,如果当时有预算,这是显而易见的
>>> x.sel(name='John_teen', hobby='books')
<xarray.DataArray ()>
array(nan)
Coordinates:
name |S10 'John_teen'
hobby |S6 'books'
什么随着年龄而改变
>>> x.sel(name='John_adult', hobby='books')
<xarray.DataArray ()>
array(500.0)
Coordinates:
name |S10 'John_adult'
hobby |S6 'books'
我的问题:
您将如何将这个 2dl-array 变成一个 3dl-array,它考虑一个名为的新维度age
(其坐标将因此['adult','teen'])
同时简化维度的坐标name
?
请注意,name
的坐标始终使用分隔的下划线构成,我的意思是 NAME_AGE。当然,您开始执行此操作的对象是x
.
是否有 xarray-builtin 方式来做到这一点?或者至少什么是最快/最便宜的方法?