有没有办法使用 scipy.signal 而不是循环来模拟以下输出?
import pandas as pd
df_in = pd.DataFrame({'Generated':[13,8,7,6],'Consume':[8,10,20,5]})
print(df_in)
Generated Consume
0 13 8
1 8 10
2 7 20
3 6 5
df_in['balance'] = [5,3,0,1]
如果 13 - 8 等于余额 5,则 5 将余额移至下一行,而 5+8-10 则得出余额 3。 3 被带入下一行,3+7-10 产生负数,但不能带负数。 因此,下一行 0 进位 + 6 - 5 产生 1 余额。
print(df_in)
预期输出:
Generated Consume balance
0 13 8 5
1 8 10 3
2 7 20 0
3 6 5 1
最佳答案
如果不是要求只有在余额为正时才添加进位,则可以对差额使用累加器。该累加器可以使用 lfilter
来实现,从递推方程中获取b
和a
参数y[n+1] = y[n] + x[n]
:
x = df_in['Generated'] - df_in['Consume']
df_in['balance'] = scipy.signal.lfilter([1], [1,-1], x)
不幸的是,仅当余额保持正值时才添加进位会使过程非线性,而 scipy.signal.lfilter
无法处理该过程。此时您必须求助于使用循环来处理特殊情况。
关于python - 使用 Scipy Signal 计算之前计算中的正余额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615218/