我正在尝试使用 Pandas/Numpy 在 Python 中创建 NPV 函数(或者使用给定的 NPV 函数)。我将使用这个简单的数据来解释我想要做什么:
这是一个数据框:
Index Array
0 1
1 2
2 3
3 4
4 5
5 0
6 0
并让比率简单地为0.05。我想计算的是每个索引号的 NPV。 NPV 函数的输入是比率 (0.05) 和一个数组。对于索引 0,数组应为 (2,3,4,5,0,0),对于索引 1,数组应为 (3,4,5,0,0),依此类推。
Excel公式: '=NPV($P$6,R7:$R$12)' 其中 P6 是比率(固定),R7 是数组中的第一个值(基于索引的变量),用于计算索引 0 的 NPV,R12 是最后一个值数组中的值(固定),即 0.
现在,当我使用金融numpy包中的预制NPV函数时,我无法轻松更改范围,我想我必须使用循环来更改数组的范围。我还尝试从头开始定义一个 NPV 函数来改变范围,但似乎无法想出一种没有循环的方法。一些想法/技巧可能是创建一个速率列来根据范围选择值,使用 lambda 来实现更快的循环等。任何帮助将不胜感激。
npf NPV
与Excel公式不同。我不确定第一个数字(Excel 中的单元格 R6)是什么意思。所有公式都没有引用过它。反正我就留着吧
import pandas as pd
import numpy_financial as npf
data = [1,2,3,4,5,0,0]
rate = 0.05
df = pd.DataFrame({'data': data})
r_window = len(data) - 1
df['rwin'] = [df['data'][(i - r_window):].tolist() for i in range(len(df))]
df['NPV'] = df['rwin'].apply(lambda x: npf.npv(rate, [0] + x))
df.loc[df.index[-1], 'NPV'] = 0
print(df.drop(columns=['rwin']))
data NPV
0 1 12.194713
1 2 10.804449
2 3 8.344671
3 4 4.761905
4 5 0.000000
5 0 0.000000
6 0 0.000000