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