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/3937#issuecomment-1233445643,https://api.github.com/repos/pydata/xarray/issues/3937,1233445643,IC_kwDOAMm_X85JhOML,14314623,2022-08-31T21:36:51Z,2022-08-31T21:36:51Z,CONTRIBUTOR,"I am interested in the coarsen with weights scenario that @dcherian and @mathause described here for a current project of ours. I solved the issue manually and its not that hard ```python import xarray as xr import numpy as np # example data with weights data = np.arange(16).reshape(4,4).astype(float) # add some nans data[2,2] = np.nan data[1,1] = np.nan # create some simple weights weights = np.repeat(np.array([[1,2,1,3]]).T, 4, axis=1) weights da = xr.DataArray(data, dims=['x', 'y'], coords={'w':(['x','y'], weights)}) da ``` ```python masked_weights = da.w.where(~np.isnan(da)) # .weighted() already knows how to do this da_weighted = da * masked_weights da_coarse = da_weighted.coarsen(x=2, y=2).sum() / masked_weights.coarsen(x=2, y=2).sum() da_coarse ``` but I feel all of this is duplicating existing functionality ([e.g. the masking of weights based on nans in the data](https://github.com/pydata/xarray/blob/b5207aa0bf2f3297d7c34d6daf29c9ea9dcefdde/xarray/core/weighted.py#L234)) and might be sensibly streamlined into something like: ```python da.weighted(da.w).coarsen(...).mean() ``` at least from a user perspective (there might be unique challenges with the implementation that I am overlooking here). Happy to help but would definitely need some guidance on this one. I do believe that this would provide a very useful functionality for many folks who work with curvilinear grids and want to prototype things that depend on some sort of scale reduction (coarsening). Also cc'ing @TomNicholas who is involved in the same project 🤗","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,594669577