我正在为我的论文做一个项目,这个项目与我拥有的一组公司的研发(R&D)费用的资本化有关。
对于那些不熟悉金融术语的人,我试图通过每段时间递减(或“折旧”)以下值来累积每年研发费用的价值。
例如,如果我们有5年的苹果研发费用,折旧率为20%:
year r&d_exp dep_rate r&d_capital
1999 10 0.2 10
2000 8 0.2 16
2001 12 0.2 24.4
2002 7 0.2 25.4
2003 15 0.2 33 如果不清楚,则通过以下方式检索r&d_capital:
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
如何在pandas Dataframe中自动执行此计算?另外,考虑到我的数据框中有多家公司。
提前感谢您的帮助:)
发布于 2020-04-01 03:10:09
我相信有更好的方法可以做到这一点,但是使用for循环和索引,您可以适当地添加'r&d_exp'和'dep_rate':
import pandas as pd
import numpy as np
df = pd.DataFrame(((1999, 10, 0.2, 10),
(2000, 8 , 0.2, 16),
(2001, 12, 0.2, 24.4),
(2002, 7 , 0.2, 25.4),
(2003, 15, 0.2, 33)),
columns=('year', 'r&d_exp', 'dep_rate', 'r&d_capital'))我们可以使用索引和列表理解来计算每个值的总和,直到每年:
# set to zero to show that correct values are recovered
df['r&d_capital'] = 0
print(df['r&d_capital'])
>>> np.array([0, 0, 0, 0, 0])
df['r&d_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)]
df['r&d_capital'].values
>>> array([10. , 16. , 24.4, 25.4, 33. ])我们使用df['r&d_exp'].iloc[:i]来提取直到索引i的序列,然后使用指数数组np.arange(i)[::-1]来生成相关年份的总折旧率。重要的是,这个数组颠倒过来,这样前面的值就有多个整数的折旧值。这就产生了我假设的折旧后的初始投资的价值。然后将所有这些贡献相加,得到总资本。这个方法已经可以处理不同的折旧率了。
原则上,这可以很容易地扩展到其他公司。
我希望这能帮到你。
https://stackoverflow.com/questions/60957176
复制相似问题