Использование Scipy Signal для переноса положительных сальдо из предыдущего расчета - PullRequest
1 голос
/ 16 июня 2019

Есть ли способ имитировать последующий вывод, используя 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 Ответ

1 голос
/ 16 июня 2019

Если бы не требование добавлять только для переноса, если баланс положительный, вы можете использовать аккумулятор для разницы. Этот аккумулятор может быть реализован с использованием 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 не предназначен для обработки. На этом этапе вам придется использовать цикл для обработки особого случая.

...