I have monthly bias-correction values, gridded over a domain, spaced at 0.5 degree intervals (see ds1 below). I have daily precipitation values, gridded over the same domain, spaced at 0.22 degree intervals (see ds2 below). For each grid point in ds2, I need to identify the grid cell it falls into in ds1 and then apply the correct month's bias correction value from ds1 to the daily ds2 pr value. How would I do this?
print(ds1):
<xarray.DataArray (month: 12, lat: 160, lon: 160)>
array([[[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
...,
[ nan, nan, nan, ..., 1.65857268,
1.39625078, 1.29690036],
[ nan, nan, nan, ..., 1.83888439,
1.62477472, 1.51900893],
[ nan, nan, nan, ..., 1.83062936,
1.74259254, 1.7321896 ]],
[[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
...
[ nan, nan, nan, ..., 2.47785328,
2.62370308, 2.89990906],
[ nan, nan, nan, ..., 2.92869831,
2.83574652, 3.18910588],
[ nan, nan, nan, ..., 3.24561771,
3.28454319, 3.3364782 ]],
[[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
...,
[ nan, nan, nan, ..., 1.74697667,
1.59683893, 1.55137055],
[ nan, nan, nan, ..., 1.77933588,
1.68900752, 1.55048538],
[ nan, nan, nan, ..., 1.73876797,
1.5361837 , 1.48602644]]])
Coordinates:
* lon (lon) float64 -19.75 -19.25 -18.75 -18.25 ... 58.75 59.25 59.75
* lat (lat) float64 -39.75 -39.25 -38.75 -38.25 ... 38.75 39.25 39.75
* month (month) int64 1 2 3 4 5 6 7 8 9 10 11 12
print(ds2):
<xarray.DataArray 'pr' (time: 7200, lat: 402, lon: 388)>
array([[[ nan, nan, nan, ...,
nan, nan, nan],
[1.02439264e+01, 8.53370824e+00, 9.22459352e+00, ...,
2.01433619e+00, 2.05144843e+00, nan],
[1.16105385e+01, 9.16766301e+00, 9.46495759e+00, ...,
1.99566535e+00, 2.20051880e+00, nan],
...,
[6.51055963e-02, 3.78015918e-02, 1.84728351e-02, ...,
1.93128089e-03, 1.86512867e-03, nan],
[8.78525181e-02, 3.95604286e-02, 2.18918203e-02, ...,
5.65447015e-03, 2.52667877e-03, nan],
[ nan, nan, nan, ...,
nan, nan, nan]],
[[ nan, nan, nan, ...,
nan, nan, nan],
[1.00231890e+00, 1.18213674e+00, 1.27730382e+00, ...,
1.87700664e+01, 1.87629225e+01, nan],
[1.04719991e+00, 1.23321695e+00, 1.33511428e+00, ...,
1.51802109e+01, 1.67274452e+01, nan],
...
[9.31256264e+00, 1.20209102e+01, 1.38895507e+01, ...,
5.52620594e+00, 5.20073497e+00, nan],
[7.38018025e+00, 9.65426266e+00, 1.18221321e+01, ...,
4.62506230e+00, 4.80847541e+00, nan],
[ nan, nan, nan, ...,
nan, nan, nan]],
[[ nan, nan, nan, ...,
nan, nan, nan],
[1.44303443e-02, 6.05955611e-02, 7.16263798e-02, ...,
1.70073773e+01, 1.65572176e+01, nan],
[2.46751410e-02, 3.06789566e-02, 4.37956929e-02, ...,
1.70963743e+01, 1.63159193e+01, nan],
...,
[3.93234263e-01, 7.24131920e-01, 1.32352682e+00, ...,
1.11767060e+00, 9.05873321e-01, nan],
[8.08598244e-01, 4.34327696e-01, 8.99296539e-01, ...,
1.16983899e+00, 9.55646188e-01, nan],
[ nan, nan, nan, ...,
nan, nan, nan]]])
Coordinates:
* time (time) datetime64[ns] 2001-01-01T12:00:00 ... 2020-12-30T12:00:00
* lon (lon) float64 -24.75 -24.53 -24.31 -24.09 ... 59.95 60.17 60.39
* lat (lat) float64 -45.87 -45.65 -45.43 -45.21 ... 41.91 42.13 42.35
Does the following do the job?