有没有一种方法可以使用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 + 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
答案 0 :(得分: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
无法处理。此时,您必须诉诸使用循环来处理特殊情况。