我想检查一下我的系列中的元素是否在不断增加。 例如,如果我有以下数字:
[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()函数或其他更好的方法。
在这方面的任何帮助将不胜感激。
答案 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:])])