id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 437765416,MDExOlB1bGxSZXF1ZXN0MjczOTcxOTQy,2922,Feature/weighted,10194086,closed,0,,,22,2019-04-26T17:09:02Z,2021-02-03T14:47:52Z,2020-03-19T14:29:43Z,MEMBER,,0,pydata/xarray/pulls/2922," - [X] Closes #422 - [X] Tests added - [X] Fully documented, including `whats-new.rst` for all changes and `api.rst` for new API I took a shot at the weighted function - I added a `DataArrayWeighted` class, that currently only implements `mean`. So, there is still quite a bit missing (e.g. `DatasetWeighted`), but let me know what you think. ``` python import numpy as np import xarray as xr da = xr.DataArray([1, 2]) weights = xr.DataArray([4, 6]) da.weighted(weights).mean() # # array(1.6) ``` There are quite a number of difficult edge cases with invalid data, that can be discussed. * I decided to replace all `NaN` in the `weights` with `0`. * if weights sum to `0` it returns `NaN` (and not `inf`) ``` python weights = xr.DataArray([0, 0]) da.weighted(weights).mean() ``` * The following returns `NaN` (could be `1`) ``` python da = xr.DataArray([1, np.nan]) weights = xr.DataArray([1, 0]) da.weighted(weights).mean(skipna=False) ``` It could be good to add all edge-case logic to a separate function but I am not sure if this is possible... ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2922/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull