diff --git a/saqc/funcs/spikes_detection.py b/saqc/funcs/spikes_detection.py index 93a23c6d0d55da53fe48221ec2057c408c8512a6..ad55bebfa8933a61ac2798eefe8ce80ec5889d21 100644 --- a/saqc/funcs/spikes_detection.py +++ b/saqc/funcs/spikes_detection.py @@ -959,6 +959,17 @@ def spikes_flagBasic(data, field, flagger, thresh, tolerance, window, numba_kick engine = 'numba' result = customRolling(to_roll, window, spikeTester, roll_mask, closed='both', engine=engine) + # correct the result: only those values define plateaus, that do not have + # values at theire left starting point, that belong to other plateaus themselfs: + def correctResult(result): + for k in range(len(result)): + if result[k] > 0: + check_val = result[int(k-result[k])] + if check_val > 0: + result[k] = np.nan + return result + + result = correctResult(result) group_col = np.nancumsum(result) group_frame = pd.DataFrame({'group_col': group_col[:-1], 'diff_col': np.diff(group_col).astype(int)}, @@ -967,7 +978,9 @@ def spikes_flagBasic(data, field, flagger, thresh, tolerance, window, numba_kick def gFunc(x): r = np.zeros(shape=x.shape[0], dtype=np.bool) - r[-x[-1]:] = True + i_val = -x[-1] + if i_val < 0: + r[i_val:] = True return r to_flag = groups['diff_col'].transform(gFunc)