From 0586093a75b6579e66119a053953ac2637c4dd4a Mon Sep 17 00:00:00 2001 From: David Schaefer <david.schaefer@ufz.de> Date: Mon, 11 Mar 2024 16:12:33 +0100 Subject: [PATCH] added option to change History.squeeze behavior --- CHANGELOG.md | 1 + saqc/core/history.py | 9 ++++++++- tests/core/test_history.py | 23 ++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9296a9dd5..b45ee4ee4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - `plot`: added `yscope` keyword - `setFlags`: function to replace `flagManual` - `flagUniLOF`: added defaultly applied correction to mitigate phenomenon of overflagging at relatively steep data value slopes. (parameter `slope_correct`). +- `History`: added option to change aggregation behavior ### Changed ### Removed ### Fixed diff --git a/saqc/core/history.py b/saqc/core/history.py index 3391697c9..db6f9e06a 100644 --- a/saqc/core/history.py +++ b/saqc/core/history.py @@ -15,6 +15,13 @@ from pandas.api.types import is_float_dtype from saqc import UNFLAGGED +AGGRGEGATIONS = { + "last": lambda x: x.ffill(axis=1).iloc[:, -1], + "max": lambda x: x.max(axis=1), + "min": lambda x: x.min(axis=1), +} +AGGREGATION = "last" + class History: """ @@ -306,7 +313,7 @@ class History: if hist.empty: result = pd.Series(data=np.nan, index=self._hist.index, dtype=float) else: - result = hist.ffill(axis=1).iloc[:, -1] + result = AGGRGEGATIONS[AGGREGATION](hist) if not raw: result = result.fillna(UNFLAGGED) result.name = None diff --git a/tests/core/test_history.py b/tests/core/test_history.py index cb3412c37..319a47fe9 100644 --- a/tests/core/test_history.py +++ b/tests/core/test_history.py @@ -9,7 +9,7 @@ import pandas as pd import pytest from pandas.api.types import is_categorical_dtype, is_float_dtype -from saqc.core.history import History, createHistoryFromData +from saqc.core.history import AGGREGATION, History, createHistoryFromData from tests.common import dummyHistory # see #GH143 combined backtrack @@ -240,3 +240,24 @@ def test_append_force(__hist, s, max_val): hist.append(s) check_invariants(hist) assert all(hist.squeeze() == max_val) + + +@pytest.mark.parametrize( + "col, expected", + [ + (pd.Series(0, index=range(6), dtype=float), {"last": 0, "min": 0, "max": 0}), + (pd.Series(1, index=range(6), dtype=float), {"last": 1, "min": 0, "max": 1}), + (pd.Series(6, index=range(6), dtype=float), {"last": 6, "min": 0, "max": 6}), + (pd.Series(4, index=range(6), dtype=float), {"last": 4, "min": 0, "max": 6}), + ], +) +def test_aggregations(__hist, col, expected): + import saqc.core.history + + hist = __hist + hist.append(col) + check_invariants(hist) + for aggregation in ["last", "min", "max"]: + saqc.core.history.AGGREGATION = aggregation + hist._aggregation = aggregation + assert (hist.squeeze() == expected[aggregation]).all() -- GitLab