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-478056621,https://api.github.com/repos/pydata/xarray/issues/1077,478056621,MDEyOklzc3VlQ29tbWVudDQ3ODA1NjYyMQ==,1277781,2019-03-29T16:10:24Z,2019-03-29T16:10:24Z,CONTRIBUTOR,"I now came across this issue, which still seems to be open. Are the statements made earlier still valid? Are there any concrete plans maybe to fix this in the near future? ","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,187069161 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