检查系列中的元素是否相对于系列熊猫中的先前值增加,快速解决方案

时间:2020-04-02 12:05:19

标签: python python-3.x pandas numpy

我想检查一下我的系列中的元素是否在不断增加。 例如,如果我有以下数字:

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

我的输出应该是

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

如果任何值大于前一个值,则输出值将输出前一个值+ 1,否则将重置为零。

我已经在python中实现了朴素的for循环解决方案,如下所示:

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

但是此解决方案相当慢,因为我正在处理大尺寸的熊猫系列。有什么有效的实现方法吗?也许在熊猫或numpy中使用expand()函数或其他更好的方法。

在这方面的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

自从您标记了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 :(得分:1)

以下是不使用累计金额的答案:

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:])])