From 8bb2a48b1b99e3fd539bb5956e6c4954d56ebab2 Mon Sep 17 00:00:00 2001 From: Maike Held Date: Tue, 2 Aug 2022 13:17:57 +0200 Subject: [PATCH] Added tests for down-sampling method --- edisgo/network/timeseries.py | 42 ++++++++++++++++++++------------ tests/network/test_timeseries.py | 6 +++++ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/edisgo/network/timeseries.py b/edisgo/network/timeseries.py index d73639bf9..526d2a4ce 100644 --- a/edisgo/network/timeseries.py +++ b/edisgo/network/timeseries.py @@ -2148,7 +2148,7 @@ def _check_if_components_exist( def resample_timeseries(self, method: str = "ffill", freq: str = "15min"): """ Returns timeseries resampled from hourly resolution to 15 minute resolution. - + #ToDo: Adjust docstring Parameters ---------- method : str, optional @@ -2174,27 +2174,36 @@ def resample_timeseries(self, method: str = "ffill", freq: str = "15min"): """ attrs = self._attributes + freq_orig = self.timeindex[1] - self.timeindex[0] df_dict = {} for attr in attrs: df_dict[attr] = getattr(self, attr) - new_dates = pd.DatetimeIndex( - [ - df_dict[attr].index[-1] + pd.DateOffset(hours=1) - ] # ToDo: For downsampling the Offset has to be adjusted - ) + if pd.Timedelta(freq) < freq_orig: # up-sampling + new_dates = pd.DatetimeIndex( + [df_dict[attr].index[-1] + freq_orig] # pd.DateOffset(hours=1) + ) + else: # down-sampling + new_dates = pd.DatetimeIndex([df_dict[attr].index[-1]]) df_dict[attr] = ( df_dict[attr] .reindex(df_dict[attr].index.union(new_dates).unique().sort_values()) .ffill() ) - index = pd.date_range( - self.timeindex[0], - self.timeindex[-1] + pd.Timedelta("1h"), - freq=freq, - closed="left", - ) + if pd.Timedelta(freq) < freq_orig: # up-sampling + index = pd.date_range( + self.timeindex[0], + self.timeindex[-1] + freq_orig, + freq=freq, + closed="left", + ) + else: # down-sampling + index = pd.date_range( + self.timeindex[0], + self.timeindex[-1], + freq=freq, + ) self._timeindex = index - if pd.Timedelta(index[1] - index[0]) < pd.Timedelta("1h"): + if pd.Timedelta(freq) < freq_orig: # up-sampling if method == "interpolate": for attr in attrs: setattr( @@ -2207,19 +2216,20 @@ def resample_timeseries(self, method: str = "ffill", freq: str = "15min"): setattr( self, attr, df_dict[attr].resample(freq, closed="left").ffill() ) - else: + elif method == "bfill": for attr in attrs: setattr( self, attr, df_dict[attr].resample(freq, closed="left").bfill() ) - else: + else: # ToDo: Logger Warning: method not implemented + print(" ") + else: # down-sampling for attr in attrs: setattr( self, attr, df_dict[attr].resample(freq).mean(), ) - print(" ") class TimeSeriesRaw: diff --git a/tests/network/test_timeseries.py b/tests/network/test_timeseries.py index af70f1d5b..6606086e1 100644 --- a/tests/network/test_timeseries.py +++ b/tests/network/test_timeseries.py @@ -2329,6 +2329,12 @@ def test_resample_timeseries(self): assert ( self.edisgo.timeseries.generators_active_power.mean() == mean_value_orig ).unique() + # Same tests for down-sampling + self.edisgo.timeseries.resample_timeseries(freq="2h") + assert len(self.edisgo.timeseries.timeindex) == 0.5 * len_timeindex_orig + assert ( + self.edisgo.timeseries.generators_active_power.mean() == mean_value_orig + ).unique() class TestTimeSeriesRaw: