Как применить функцию argrelextrema в Python 3.7? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь применить функцию argrelextrema с фреймом данных df. Но не в состоянии правильно применить. ниже мой код

    import pandas as pd
    from scipy.signal import argrelextrema 
    np.random.seed(42)

        def maxloc(data):
            loc_opt_ind = argrelextrema(df.values, np.greater)
            loc_max = np.zeros(len(data))
            loc_max[loc_opt_ind] = 1
            data['loc_max'] = loc_max
            return data

        values = np.random.rand(23000)
        df = pd.DataFrame({'value': values})
        np.all(maxloc_faster(df).loc_max)

It gives me error 
that loc_max[loc_opt_ind] = 1
IndexError: too many indices for array 

1 Ответ

0 голосов
/ 07 апреля 2020

A Pandas массив данных является двумерным. То есть df.values является двумерным, даже , когда он имеет только один столбец. В результате, loc_opt_ind будет содержать индексы x и y (два кортежа; просто напечатайте loc_opt_ind, чтобы увидеть), которые нельзя использовать для индексации loc_max. Вы, вероятно, хотите использовать либо df['values'].values (который превращается в <Series>.values), либо np.squeeze(df.values) в качестве ввода. Обратите внимание, что argrelextrema по-прежнему возвращает кортеж в этом случае, просто одноэлементный, поэтому вам может понадобиться loc_opt_ind[0] (np.where имеет похожее поведение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...