Я работаю над проектом для моей диссертации, которая связана с капитализацией расходов на исследования и разработки (R & D) для набора данных компаний, которые у меня есть.
Для тех, кто не знаком с финансовой терминологией я пытаюсь накапливать значения расходов на НИОКР каждого года с помощью следующих значений, уменьшая их стоимость (или «обесценивая») каждый период времени.
Мне удалось применить следующий код для получить суть операции:
df['rd_capital'] = [(df['r&d_exp'].iloc[:i] * (1 - df['dep_rate'].iloc[:i]*np.arange(i)[::-1])).sum() for i in range(1,len(df)+1)]
Однако у этого метода есть существенный недостаток, заключающийся в том, что он продолжает снижать норму амортизации, как только значение достигнет нуля, и, следовательно, перейти на отрицательную территорию. .
Например, если у нас расходы на исследования и разработки Apple в течение 5 лет при постоянной норме амортизации 20%, приведенный выше код дает мне следующий результат:
year r&d_exp dep_rate r&d_capital
0 1999 10 0.2 10
1 2000 8 0.2 16
2 2001 12 0.2 24.4
3 2002 7 0.2 25.4
4 2003 15 0.2 33
5 2004 8 0.2 30.6
6 2005 11 0.2 29.6
Однако значение для 2005 год неверен и должен быть 31,6!
Если неясно, r & d_capital извлекается следующим образом way:
2000 = 10*(1-0.2) + 8
2001 = 10*(1-0.4) + 8*(1-0.2) + 12
2002 = 10*(1-0.6) + 8*(1-0.4) + 12*(1-0.2) + 7
2003 = 10*(1-0.8) + 8*(1-0.6) + 12*(1-0.4) + 7*(1-0.2) + 15
здесь возникает ключевая проблема, так как приведенный выше код выполняет следующее:
2004 = 10*(1-1) + 8*(1-0.8) + 12*(1-0.6) + 7*(1-0.4) + 15*(1-0.2) + 8
2005 = 10*(1-1.2) + 8*(1-1) + 12*(1-0.8) + 7*(1-0.6) + 15*(1-0.4) + 8*(0.2) + 11
Вместо этого он должен отбрасывать значения, как только значение достигает нуля, вот так:
2004 = 8*(1-0.8) + 12*(1-0.6) + 7*(1-0.4) + 15*(1-0.2) + 8
2005 = 12*(1-0.8) + 7*(1-0.6) + 15*(1-0.4) + 8*(0.2) + 11
Заранее благодарю за любую помощь, которую вы окажете, очень ценю :)