diff --git a/CHANGELOG.md b/CHANGELOG.md index 839310af7c89e234921ce0d54afdbadd97558a88..ddd4980e1083e29bf721f35b359ad3a6d8000e9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - python 3.7 support ### Fixed - Error for interpolations with limits set to be greater than 2 (`interpolateNANs`) +- Error when fitting polynomials to irregularly sampled data (`fitPolynomial`) ## [2.2.1](https://git.ufz.de/rdm-software/saqc/-/tags/v2.2.1) - 2022-10-29 [List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.2.0...v2.2.1) diff --git a/saqc/funcs/curvefit.py b/saqc/funcs/curvefit.py index 865550c8bad4d3eaedd5b4fda221544ec21e492e..9261e2fcb720727fdaecb10248d2f6c5aea1ce2b 100644 --- a/saqc/funcs/curvefit.py +++ b/saqc/funcs/curvefit.py @@ -180,31 +180,14 @@ def _fitPolynomial( "sample series." ) # get interval centers - centers = ( - to_fit.rolling( - pd.Timedelta(window) / 2, closed="both", min_periods=min_periods - ).count() - ).floor() + centers = to_fit.rolling( + pd.Timedelta(window) / 2, closed="both", min_periods=min_periods + ).count() centers = centers.drop(centers[centers.isna()].index) centers = centers.astype(int) fitted = to_fit.rolling( - pd.Timedelta(window), closed="both", min_periods=min_periods + pd.Timedelta(window), closed="both", min_periods=min_periods, center=True ).apply(polyRollerIrregular, args=(centers, order)) - - def center_func(x, y=centers): - pos = x.index[int(len(x) - y[x.index[-1]])] - return y.index.get_loc(pos) - - centers_iloc = ( - centers.rolling(window, closed="both") - .apply(center_func, raw=False) - .astype(int) - ) - temp = fitted.copy() - for k in centers_iloc.iteritems(): - fitted.iloc[k[1]] = temp[k[0]] - fitted[fitted.index[0] : fitted.index[centers_iloc[0]]] = np.nan - fitted[fitted.index[centers_iloc[-1]] : fitted.index[-1]] = np.nan else: if isinstance(window, str): window = pd.Timedelta(window) // regular