使用Scipy Signal进行先前计算得出的正余额

时间:2019-06-16 00:40:58

标签: python scipy signal-processing

有没有一种方法可以使用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

1 个答案:

答案 0 :(得分:1)

如果不是只有余额为正数时才需要增加进位,则可以在差额上使用累加器。可以使用lfilter来实现此累加器,并从递归公式b获得ay[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无法处理。此时,您必须诉诸使用循环来处理特殊情况。