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