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/pull/1696#issuecomment-343704025,https://api.github.com/repos/pydata/xarray/issues/1696,343704025,MDEyOklzc3VlQ29tbWVudDM0MzcwNDAyNQ==,5635139,2017-11-12T00:14:26Z,2017-11-12T00:14:26Z,MEMBER,"@jhamman Perfect! I had a read through yours and it looks great, excited to get this merged.
I'll close this","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,271991268
https://github.com/pydata/xarray/pull/1696#issuecomment-343649431,https://api.github.com/repos/pydata/xarray/issues/1696,343649431,MDEyOklzc3VlQ29tbWVudDM0MzY0OTQzMQ==,2443309,2017-11-11T08:30:35Z,2017-11-11T08:30:35Z,MEMBER,@MaximilianR - quick update. My implementation of ffill/bfill in #1640 is a bit cleaner now and seems to be working. It probably makes sense for me to just finish off this feature in that PR. Maybe you could give it a review when you get a chance? ,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,271991268
https://github.com/pydata/xarray/pull/1696#issuecomment-342719382,https://api.github.com/repos/pydata/xarray/issues/1696,342719382,MDEyOklzc3VlQ29tbWVudDM0MjcxOTM4Mg==,2443309,2017-11-08T06:01:57Z,2017-11-08T06:01:57Z,MEMBER,"@MaximilianR - I have rough implementation of both of these on my interpolate branch:
https://github.com/jhamman/xarray/blob/56f37144f2dc827b61aa61f94c69277e6a79c262/xarray/core/missing.py#L206-L234
some slight modifications gives this:
```Python
def _bfill(arr, n=None, axis=-1):
'''inverse of ffill'''
import bottleneck as bn
arr = np.flip(arr, axis=axis)
# fill
arr = bn.push(arr, axis=axis, n=n)
# reverse back to original
return np.flip(arr, axis=axis)
def ffill(self, dim=None, limit=None):
''' '''
import bottleneck as bn
return apply_ufunc(bn.push, self,
dask='forbidden',
keep_attrs=True,
kwargs=dict(n=limit, axis=self.get_axis_num(dim))).transpose(*arr.dims)
def bfill(self, dim=None, limit=None):
''' '''
return apply_ufunc(_bfill, self,
dask='forbidden',
keep_attrs=True,
kwargs=dict(n=limit, axis=self.get_axis_num(dim))).transpose(*arr.dims)
```
As @shoyer says, it may be possible to change to `dask='parallelized'` but I have tried it yet.
Feel free to take what you want from this snippet, I am moving pretty slowly on my interpolation branch but it would be great if you can get this in as a stand alone feature.","{""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 1, ""rocket"": 0, ""eyes"": 0}",,271991268
https://github.com/pydata/xarray/pull/1696#issuecomment-342681838,https://api.github.com/repos/pydata/xarray/issues/1696,342681838,MDEyOklzc3VlQ29tbWVudDM0MjY4MTgzOA==,1217238,2017-11-08T01:38:48Z,2017-11-08T01:38:48Z,MEMBER,"> Do we prefer fillna with options (back / forward / replacement), or ffill, bfill, fillna?
I like separate methods. It keeps things logically well separated.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,271991268