我有一组1000(2D)pd.Dataframe
(比如说,索引:时间,列:run_id),每个属性都有3个属性(比如温度、压力、位置)。理想情况下,我希望在一个5维的xr.DataArray
中包含所有内容(或者具有4个维度的xr.dataset
中的所有内容,并将最后一个维度作为唯一的数据变量)。在
我创建了一个带有两个dim和2+3个坐标的DataArray,但是xr.concat
似乎不适用于多个维度。(我遵循了这里提到的方法Add 'constant' dimension to xarray Dataset。)在
示例:我从单个数据帧和属性列表构建数据数组。在
# Mock data:
data = {}
for i in np.arange(500):
data[i] = pd.DataFrame(np.random.randn(1000, 8), index=pd.DatetimeIndex(start='01.01.2013',periods=1000,freq='h'),
columns=list('ABCDEFGH'))
df_catalogue = pd.DataFrame(np.random.choice(10,(500, 3)), columns=['temp','pre','zon'])
#Build DataArrays adding scalar coords
res_da = []
for i,v in df_catalogue.iterrows():
i_df = data[i] # data is a dictionary of properly indexed dataframes
da = xr.DataArray(i_df.values,
coords={'time':i_df.index.values,'runs':i_df.columns.values,
'temp':v['temp'], 'pre':v['pre'],'zon':v['zon']},
dims=['time','runs'])
res_da.append(da)
但是当我尝试all_da = xr.concat(res_da, dim=['temp','pre','zon'])
时,我得到了奇怪的结果。实现这一目标的最佳方法是:
xarray.concat
仅支持沿单个维度连接。但我们可以通过串联、设置多重索引然后取消堆叠来解决这个问题。在我改变了你的设置代码,因为这只在你构建的新坐标(
['temp','pre','zon']
)的每个组合都是唯一的情况下才有效:然后,我们可以简单地写下:
^{pr2}$从而得到您想要的5D阵列:
相关问题 更多 >
编程相关推荐