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