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