Я пытаюсь построить общую модель денежных потоков в python / pandas, которая будет состоять из таких выражений, как
'Прибыль = Доход-Стоимость'
'Капитал = Капитал [T-1] + Прибыль'
' 3YearProfit = Прибыль [T-2:]. Sum () '
' Капитал [0] = 100 '
и т. Д.
Модель будет встроена в кадр данных pandasdf где каждая строка представляет период движения денежных средств (например, месяцы или кварталы).Первая строка относится к первому периоду (время 0), вторая к следующему периоду и т. Д.
Каждое из приведенных выше выражений необходимо преобразовать в итерацию по строкам в кадре данных, напримеркак
for ndx in df.index:
df.loc[df.index[ndx],'Profit']=df.loc[df.index[ndx],'Revenue']-df.loc[df.index[ndx],'Cost']
df.loc[df.index[ndx],'Capital']=df.loc[df.index[ndx-1],'Capital']+df.loc[df.index[ndx],'Profit']
df.loc[df.index[ndx],'3YearProfit']=df.loc[df.index[ndx-2:],'Profit'].sum()
цикл for обновит все переменные в соответствии с выражениями, начиная с T = 0 до последнего периода (последней строки) в кадре данных.
В идеале регулярное выражениеparser будет идентифицировать в строковом выражении те строки, которые будут считаться именами переменных, с дополнительной опцией - суффикс [x] или [x: y], где x, y оба <0 и означают число периодов дотекущий.Если суффикс отсутствует, предполагается, что он ссылается на время T, т. Е. Эквивалентно [0]. </p>
Чтобы избежать путаницы, допустимые переменные модели, вероятно, следует объявлять в SeriesVarList Series или Dictionary, чтобы только строкиопределенные в modelVarList проверяются регулярным выражением
В идеале выражение может быть достаточно сложным, чтобы оно могло перейти от [expression] к [parsedExpression] с заменами на eval (parsedExpression) для получения фактического результата,Поэтому синтаксический анализатор, который распознает ключевые слова и синтаксис Python / numpy / pandas, будет гораздо полезнее, чем простое распознавание нескольких операторов, таких как +, -, *, /
. Имеется ли такой синтаксический анализатор, как мне получить к нему доступ?и какие-либо подсказки о том, как настроить процесс?