How to identify all local maxima or peaks of a numeric Pandas Series in Python?

I was working on identifying all possible local maxima or peaks from a numeric series using Python and came up with the following solution:

Local maxima or peaks are basically the values in a series where the value is higher than its neighboring points i.e., it is a point where the function is increasing on both sides of it. The code I use involves using a for loop and although the code also checks for invalid data types and empty values, I believe there are more efficient methods of doing this task, please provide them below with example codes.

@mubashir_rizvi, I think List comprehension is a short way of achieving this task using loops, the same condition and error checks are used which you used in your code.

Hi, @mubashir_rizvi One of the most efficient ways is by using the find_peaks() function, which takes a one-dimensional array or sequence as input and returns the indices of all peaks.

  • By default, it identifies peaks as local maxima, but it also allows you to specify a minimum height or prominence of the peak, which can be useful when working with noisy data or when one is interested in identifying only the most significant peaks.
  • The second variable returned by find_peaks() is an empty array that is ignored, but it can be used to obtain additional information about the peaks, such as their heights or widths.

Hey @mubashir_rizvi , you can use the argrelextrema() function takes an array or sequence as input and returns the indices of all local extrema, which can be local maxima or local minima. By default, it identifies both local maxima and minima.

In this code example, we pass series values to this function using the `values` attribute to find the indices. The `np.greater` argument tells `argrelextrema()` to identify local maxima, rather than local minima. The function returns a tuple of array containing the indices of the local maxima, which are used to access the values from the series.