这可能是通过 pandas 中的滚动函数来完成的,不确定,但我想将以下函数应用于列表,位置 x 的当前状态 S 定义为
S[x] = if S[x-1] > 0 S[x-1] -1 + S[x] else S[x] -1 for x > 1
可以理解为当前状态-1和当前状态...这是因为我需要做一种之前所有位置-1+当前位置的累加和。
列表示例
[1,1,2,0,0,2]
返回该值
[0,0,1,0,-1,1]
因为:
S[0] = 1 - 1 = 0
S[1] = S[1] - 1 + S[0] = 1 - 1 + 0 = 0
S[2] = S[2] - 1 + S[1] = 2 - 1 + 0 = 1
S[3] = S[3] - 1 + S[2] = 0 - 1 + 1 = 0
S[4] = S[4] - 1 + S[3] = 0 - 1 + 0 = -1
S[5] = S[5] - 1 (no S[4] because the else rule being smaller than 0) = 2 - 1 = 1
我很确定这可以在 pandas 中完成,但我也对我发送列表的标准 python 函数持开放态度(不过更喜欢 pandas)。
一直在尝试递归,但惨败。
减去 1 然后使用 cumsum
(s-1).cumsum()
0 0
1 0
2 1
3 0
4 -1
5 0
在这里,修改解决方案以适应计算累积和的条件
np.where(((s.shift(1) - 1).cumsum()) > 0,
(s-1).cumsum(),
s-1)
[ 0, 0, 1, 0, -1, 1]