我们如何在 Dataframe 中找到现金流量的 IRR?
How can we find the IRR of cash flows in a Dataframe?
我可以使用下面的代码轻松找到数据框中的项目的 NPV。但是我怎样才能得到相同项目的内部收益率呢?
import numpy_financial as npf
import pandas as pd
# Intitialise data of lists
data = [{'Month': '2020-01-01', 'Expense':1000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':5000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
df
df.groupby("Building")["Revenue"].apply(lambda x: npf.npv(rate=0.1, values=x))
结果:
Building
Casino 24587.528174
Stadium 15773.854245
我试着找到 IRR,就像这样。
df.groupby("Building")["Revenue"].apply(lambda x: npf.irr(values=x))
它只计算 NAN。
结果:
Building
Casino NaN
Stadium NaN
您试图找到的是利率,其中 NPV 为 0。但是,由于您只有正收入而没有初始投资(负号),因此不可能。请检查使用的公式 in the docs。您可能还想考虑费用?
我已经编辑了您的示例以演示可行的解决方案。
更新:我增加了大笔初始付款并将支出和收入之间的差值传递给 irr()
。
import numpy_financial as npf
import pandas as pd
data = [{'Month': '2020-01-01', 'Expense':100000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':500000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
irr = df.groupby('Building')[['Revenue','Expense']].apply(lambda x: npf.irr(x['Revenue'] - x['Expense']))
print(irr)
输出:
Building
Casino -0.786486
Stadium -0.809623
dtype: float64
虽然我不是财务分析方面的专家,但我认为这个问题需要比所提供的内容更多的解释和评估。因此,尽管对@KarelZ 的回应给予了应有的尊重,它实际上为所述数据提供了答案,但我认为从财务分析的角度来看,它没有多大价值。
根据定义,Internal Rate of Return (IRR) 是财务分析中用于估计潜在投资盈利能力的指标。 IRR 是在贴现现金流分析中使所有现金流的净现值 (NPV) 等于零的贴现率。该定义中的固有假设是 (1) 存在初始投资,并且 (2) 存在投资产生的现金流。
根据定义,Net Present Value (NPV) 是您的项目与您的初始投资相比以指定利率 return 计算的现金流现值。实际上,它是一种计算项目或支出的 return 投资或 ROI 的方法。虽然 NPV 不一定意味着初始投资,但它确实意味着为了使计算有用,应该评估真实的现金流量,这意味着要考虑到有意义的费用和收入。
为了计算有效的内部收益率,我们需要将初始投资纳入结构中,并根据费用和收入之间的差异计算内部收益率。考虑到这一点,我通过向每个结构添加一行来修改原始数据集,将初始投资显示为费用。见下文:
# Intitialise data of lists
data = [{'Month': '2019-12-01', 'Expense':100000, 'Revenue':0, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':1000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2019-12-01', 'Expense':150000, 'Revenue':0, 'Building':'Casino'},
{'Month': '2020-01-01', 'Expense':5000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
这将生成如下所示的数据框:
Month Expense Revenue Building
0 2019-12-01 100000 0 Stadium
1 2020-01-01 1000 5000 Stadium
2 2020-02-01 3000 4000 Stadium
3 2020-03-01 7000 5000 Stadium
4 2020-04-01 3000 4000 Stadium
5 2019-12-01 150000 0 Casino
6 2020-01-01 5000 6000 Casino
7 2020-02-01 5000 4000 Casino
8 2020-03-01 5000 9000 Casino
9 2020-04-01 6000 10000 Casino
我向这个数据框添加了一个 CashFlow 列,其中包含费用和收入之间的差异,如下所示:
def computeCashFlow(e, r):
return r-e
df['CashFlow'] = df.apply(lambda row: computeCashFlow(row.Expense, row.Revenue), axis= 1)
这会导致添加如下所示的 CashFlow:
Month Expense Revenue Building CashFlow
0 2019-12-01 100000 0 Stadium -100000
1 2020-01-01 1000 5000 Stadium 4000
2 2020-02-01 3000 4000 Stadium 1000
3 2020-03-01 7000 5000 Stadium -2000
4 2020-04-01 3000 4000 Stadium 1000
5 2019-12-01 150000 0 Casino -150000
6 2020-01-01 5000 6000 Casino 1000
7 2020-02-01 5000 4000 Casino -1000
8 2020-03-01 5000 9000 Casino 4000
9 2020-04-01 6000 10000 Casino 4000
使用现金流列,您可以按如下方式计算 IRR 和 NPR:
df.groupby("Building")["CashFlow"].apply(lambda x: npf.npv(rate=0.1, values=x))
Building
Casino -144180.042347
Stadium -96356.806229
Name: CashFlow, dtype: float64
df.groupby('Building')['CashFlow'].apply(lambda x: npf.irr(x))
Building
Casino -0.559380
Stadium -0.720914
Name: CashFlow, dtype: float64
在考虑原始投资的情况下给出 NPV 和 IRR 的实际结果
我可以使用下面的代码轻松找到数据框中的项目的 NPV。但是我怎样才能得到相同项目的内部收益率呢?
import numpy_financial as npf
import pandas as pd
# Intitialise data of lists
data = [{'Month': '2020-01-01', 'Expense':1000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':5000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
df
df.groupby("Building")["Revenue"].apply(lambda x: npf.npv(rate=0.1, values=x))
结果:
Building
Casino 24587.528174
Stadium 15773.854245
我试着找到 IRR,就像这样。
df.groupby("Building")["Revenue"].apply(lambda x: npf.irr(values=x))
它只计算 NAN。
结果:
Building
Casino NaN
Stadium NaN
您试图找到的是利率,其中 NPV 为 0。但是,由于您只有正收入而没有初始投资(负号),因此不可能。请检查使用的公式 in the docs。您可能还想考虑费用?
我已经编辑了您的示例以演示可行的解决方案。
更新:我增加了大笔初始付款并将支出和收入之间的差值传递给 irr()
。
import numpy_financial as npf
import pandas as pd
data = [{'Month': '2020-01-01', 'Expense':100000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':500000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
irr = df.groupby('Building')[['Revenue','Expense']].apply(lambda x: npf.irr(x['Revenue'] - x['Expense']))
print(irr)
输出:
Building
Casino -0.786486
Stadium -0.809623
dtype: float64
虽然我不是财务分析方面的专家,但我认为这个问题需要比所提供的内容更多的解释和评估。因此,尽管对@KarelZ 的回应给予了应有的尊重,它实际上为所述数据提供了答案,但我认为从财务分析的角度来看,它没有多大价值。
根据定义,Internal Rate of Return (IRR) 是财务分析中用于估计潜在投资盈利能力的指标。 IRR 是在贴现现金流分析中使所有现金流的净现值 (NPV) 等于零的贴现率。该定义中的固有假设是 (1) 存在初始投资,并且 (2) 存在投资产生的现金流。
根据定义,Net Present Value (NPV) 是您的项目与您的初始投资相比以指定利率 return 计算的现金流现值。实际上,它是一种计算项目或支出的 return 投资或 ROI 的方法。虽然 NPV 不一定意味着初始投资,但它确实意味着为了使计算有用,应该评估真实的现金流量,这意味着要考虑到有意义的费用和收入。
为了计算有效的内部收益率,我们需要将初始投资纳入结构中,并根据费用和收入之间的差异计算内部收益率。考虑到这一点,我通过向每个结构添加一行来修改原始数据集,将初始投资显示为费用。见下文:
# Intitialise data of lists
data = [{'Month': '2019-12-01', 'Expense':100000, 'Revenue':0, 'Building':'Stadium'},
{'Month': '2020-01-01', 'Expense':1000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-02-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2020-03-01', 'Expense':7000, 'Revenue':5000, 'Building':'Stadium'},
{'Month': '2020-04-01', 'Expense':3000, 'Revenue':4000, 'Building':'Stadium'},
{'Month': '2019-12-01', 'Expense':150000, 'Revenue':0, 'Building':'Casino'},
{'Month': '2020-01-01', 'Expense':5000, 'Revenue':6000, 'Building':'Casino'},
{'Month': '2020-02-01', 'Expense':5000, 'Revenue':4000, 'Building':'Casino'},
{'Month': '2020-03-01', 'Expense':5000, 'Revenue':9000, 'Building':'Casino'},
{'Month': '2020-04-01', 'Expense':6000, 'Revenue':10000, 'Building':'Casino'}]
df = pd.DataFrame(data)
这将生成如下所示的数据框:
Month Expense Revenue Building
0 2019-12-01 100000 0 Stadium
1 2020-01-01 1000 5000 Stadium
2 2020-02-01 3000 4000 Stadium
3 2020-03-01 7000 5000 Stadium
4 2020-04-01 3000 4000 Stadium
5 2019-12-01 150000 0 Casino
6 2020-01-01 5000 6000 Casino
7 2020-02-01 5000 4000 Casino
8 2020-03-01 5000 9000 Casino
9 2020-04-01 6000 10000 Casino
我向这个数据框添加了一个 CashFlow 列,其中包含费用和收入之间的差异,如下所示:
def computeCashFlow(e, r):
return r-e
df['CashFlow'] = df.apply(lambda row: computeCashFlow(row.Expense, row.Revenue), axis= 1)
这会导致添加如下所示的 CashFlow:
Month Expense Revenue Building CashFlow
0 2019-12-01 100000 0 Stadium -100000
1 2020-01-01 1000 5000 Stadium 4000
2 2020-02-01 3000 4000 Stadium 1000
3 2020-03-01 7000 5000 Stadium -2000
4 2020-04-01 3000 4000 Stadium 1000
5 2019-12-01 150000 0 Casino -150000
6 2020-01-01 5000 6000 Casino 1000
7 2020-02-01 5000 4000 Casino -1000
8 2020-03-01 5000 9000 Casino 4000
9 2020-04-01 6000 10000 Casino 4000
使用现金流列,您可以按如下方式计算 IRR 和 NPR:
df.groupby("Building")["CashFlow"].apply(lambda x: npf.npv(rate=0.1, values=x))
Building
Casino -144180.042347
Stadium -96356.806229
Name: CashFlow, dtype: float64
df.groupby('Building')['CashFlow'].apply(lambda x: npf.irr(x))
Building
Casino -0.559380
Stadium -0.720914
Name: CashFlow, dtype: float64
在考虑原始投资的情况下给出 NPV 和 IRR 的实际结果