html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/1077#issuecomment-436015893,https://api.github.com/repos/pydata/xarray/issues/1077,436015893,MDEyOklzc3VlQ29tbWVudDQzNjAxNTg5Mw==,7441788,2018-11-05T20:03:48Z,2018-11-05T20:03:48Z,CONTRIBUTOR,"This code isn't particularly pretty, and I'm not sure if it handles all cases, but it enables serialization of MultiIndex indices by calling `ds.mi.encode_multiindices()` before serializing and `ds.mi.decode_multiindices()` after deserializing. ``` @xr.register_dataset_accessor('mi') class MiscDatasetAccessor(): def __init__(self, xarray_obj): self._obj = xarray_obj def encode_multiindices(self): result = self._obj for name, index in list(self._obj.indexes.items()): if isinstance(index, pd.MultiIndex): temp_name = '__' + name new_coords = {'{}__{}'.format(temp_name, level_name): level_values.rename(None) for level_name, level_values in zip(index.names, index.levels)} new_coords[temp_name] = xr.DataArray(index.labels, dims=('{}__names__'.format(temp_name), '{}__num__'.format(temp_name)), coords={'{}__names__'.format(temp_name): index.names, '{}__num__'.format(temp_name): list(range(len(index)))}, attrs={'__is_multiindex': 1}) result = result.drop(name).assign_coords(**new_coords) return result def decode_multiindices(self): result = self._obj for temp_name, da in list(self._obj.coords.items()): if temp_name.startswith('__') and da.attrs.get('__is_multiindex', False): name = temp_name[2:] level_names = da.coords['{}__names__'.format(temp_name)].values levels = [result.coords['{}__{}'.format(temp_name, level_name)].values for level_name in level_names] labels = da.values result = result.assign_coords(**{name: pd.MultiIndex(levels=levels, labels=labels, names=level_names)}) result = result.drop(['{}__{}'.format(temp_name, level_name) for level_name in level_names] + list(da.dims) + [temp_name]) return result ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,187069161