Найти максимальное значение, когда в скользящем окне появляются 2 или более значений - PullRequest
1 голос
/ 26 июня 2019

Проблема заключается в следующем:

Мне нужно с помощью простой функции обнаружить «пики» в моих данных (с помощью скользящего окна). Пики обнаруживаются с True или False. Эта часть сделана.

Теперь приходит часть, где я застрял: В пределах 10 рядов пика, когда есть второй (или третий, четвертый и т. Д.) Пик, мне нужно «объединить» их в один пик, взяв максимальное значение между этими пиками, а также вернуть индекс этого максимального значения , Посмотрите на картинку, что для этого нужно.

Следовательно, я хотел бы найти самый высокий пик, когда имеется более 1 пика в диапазоне 10 индексов (равно 2,5 метра, поскольку каждый ряд находится на расстоянии 25 сантиметров от следующего ряда).

Я пробовал что-то подобное, что не делает то, что мне нужно.

def merge_peaks(df):
    return df.assign(

        multiple_peaks = lambda df: df['heightdiff_peak'].rolling(window=10, min_periods=1).sum(),

        highest_peak = lambda df: df[df['multiple_peaks']>1]['abs_diff_height'].rolling(window=10, min_periods=1).max()

    )

    Location    abs_diff_height mean_height_diff    std_height_diff heightdiff_peak multiple_peaks  highest_peak    highest_peak_center
572 82.75   7.900000    2.0226  2.114609    True    1.0 NaN NaN
573 83.00   7.900000    2.0444  2.159749    True    2.0 7.900000    7.900000
823 145.50  14.900000   3.7790  4.703665    True    1.0 NaN NaN
824 145.75  14.900000   3.7710  4.700043    True    2.0 14.900000   17.800000
825 146.00  15.900000   3.7692  4.700165    True    3.0 15.900000   17.800000
826 146.25  16.900000   3.7674  4.699520    True    4.0 16.900000   17.800000
827 146.50  17.800000   3.7694  4.699832    True    5.0 17.800000   17.800000
828 146.75  17.800000   3.7734  4.700880    True    6.0 17.800000   17.800000
829 147.00  17.800000   3.7774  4.701071    True    7.0 17.800000   17.800000
830 147.25  17.800000   3.7834  4.699433    True    8.0 17.800000   17.800000


  [1]: https://i.stack.imgur.com/l0uF5.jpg
...