Pandas: Расчет IRR ссудных денежных потоков - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть данные о денежных потоках Pandas непредсказуемой длины.Они варьируются ежемесячно в течение периода от нескольких месяцев до 30+ месяцев, и каждый месяц существует столбец, содержащий информацию о движении денежных средств за эти месяцы.Мне нужно вычислить IRR для каждого займа, который определяется следующим образом:

Определение IRR, где r - это "IRR", когда NPV установлен в 0.

Ниже приведена ссылка на пример df, где у меня есть «months_remaining», начальный отток и диапазон денежных потоков за переменные периоды (между 19 февраля и 29 декабря).«S» представляет собой погашенный заем, т.е. он достиг срока погашения и погасил всю сумму.«0» означает ссуду с просроченной задолженностью, поэтому дальнейшие денежные потоки не ожидаются на неограниченный срок;

Ссуды DF

Я испробовал ряд подходов.(1) Использование iterrows для создания массива numpy для каждой строки, затем попытался использовать numpy.irr, однако проблема только расчета IRR для переменного периода времени остается (мне нужно распознать, когда денежные потоки прекращаются с "S" и прекращают вычислятьс этой точки.) (2) Избегая построчных подходов и пытаясь выполнить вычисления в Pandas, снова смесь некоторых «S» кредитов и некоторых нормальных денежных потоков в столбцах опрокидывает этот подход.

Ячейка, в которой я сейчас работаю.

Спасибо за любую помощь, которую вы можете оказать.

[EDIT] Пример рабочего кода с использованием цикла for

 for row in irr_array:
  LoanID=row[1]
  Tier=row[2]
  row=row[2:2000]
  if "S" in row:
    new_array = [i for i in row if i is not "S"]
    irr_results["IRR"]= (pd.Series(round(irr(new_array),3)))
    irr_results["LoanID"]=(pd.Series(LoanID))
    irr_results["Tier"]=(pd.Series(Tier))
    results=irr_df.append(irr_results)
  if 0 in row:
    irr_results["IRR"]= 0
    irr_results["LoanID"]=(pd.Series(LoanID))
    irr_results["Tier"]=(pd.Series(Tier))
    results=irr_df.append(irr_results)      
...