Проверьте, увеличивается ли элемент в серии по сравнению с предыдущими значениями в серии pandas, быстрое решение - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу проверить, постоянно ли увеличиваются элементы моей серии. Например, если у меня есть следующие числа:

[7, 15, 23, 0, 32, 18] 

мой вывод должен быть

[0, 1, 2, 0, 1, 0] 

Если какое-либо значение больше предыдущего, то выходное значение будет выведено из предыдущего значение + 1, в противном случае оно сбрасывается в ноль.

Я реализовал наивное решение для l oop в python, которое выглядит следующим образом:

def const_increasing(tmp):
    inc_ser = np.zeros(len(tmp))
    for i in range(1, len(tmp)):
        if tmp[i] > tmp[i-1]:
            inc_ser[i] = 1 + inc_ser[i-1]
    return inc_ser

Но это решение довольно медленно, так как я работаю с серией pandas больших размеров. Есть ли эффективный способ его реализации? Может быть, с использованием функции expanding () или любым другим способом в pandas или numpy.

Любая помощь в этом отношении будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 02 апреля 2020

Поскольку вы пометили pandas:

s = pd.Series([7, 15, 23, 0, 32, 18] ).diff().gt(0)
s.groupby((~s).cumsum()).cumcount().to_list()

Вывод:

[0, 1, 2, 0, 1, 0]
1 голос
/ 02 апреля 2020

Вот ответ, который не использует накопленную сумму:

import numpy as np

a = np.array([7, 15, 23, 0, 32, 18])
c = np.append(np.array([False]), (a[1:] > a[:-1]))
result = np.concatenate([np.arange(x.size)
                         for x in np.split(c, np.where(c == False)[0][1:])])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...