首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas数据帧净现值向量化(函数向量化)

Pandas数据帧净现值向量化(函数向量化)
EN

Stack Overflow用户
提问于 2018-10-20 23:20:57
回答 1查看 741关注 0票数 0

我有以下数据帧:

代码语言:javascript
复制
import numpy as np
import pandas as pd
dates = pd.date_range(start='2014-01-01',end='2018-01-01',  freq='Y')
df = pd.DataFrame(5*np.eye(4,), index=dates, columns=['Var1', 'Var2', 'Var3', 'Var4'])
print(df)

            Var1  Var2  Var3  Var4
2014-12-31   5.0   0.0   0.0   0.0
2015-12-31   0.0   5.0   0.0   0.0
2016-12-31   0.0   0.0   5.0   0.0
2017-12-31   0.0   0.0   0.0   5.0

我想计算每个变量在三年内2014年和2015年的净现值。

现在,我知道如何一次获得一行变量的现值:

代码语言:javascript
复制
Var1_2014     = df.loc['2014':'2016','Var1'].tolist()
NPV_Var1_2014 = np.npv(0.7,[0]+Var1_2014) 

但是,我不知道如何将函数向量化以直接计算整个列。我想要得到这样的东西:

代码语言:javascript
复制
             Var1  Var2  Var3  Var4  Var1_NPV
2014-12-31   5.0   0.0   0.0   0.0      a
2015-12-31   0.0   5.0   0.0   0.0      b
2016-12-31   0.0   0.0   5.0   0.0     Nan
2017-12-31   0.0   0.0   0.0   5.0     Nan

在那里我可以说像df['Var1_NPV']= npv('Var1',duration=3years,discount_rate=0.7)这样的话

你知道我该如何有效地向量化这个函数吗?

非常感谢,

EN

回答 1

Stack Overflow用户

发布于 2018-10-21 00:14:52

我找到了apply和offset的解决方案:

代码语言:javascript
复制
def give_npv(date,df,var,wacc):   
    date2 = date + pd.DateOffset(years=2)  
    data    = df.loc[date:date2,var].tolist()
    NPV_var = np.npv(wacc,[0]+data) 
    return NPV_var


df['index2'] = df.index
df['test'] = df.apply(lambda x: give_npv(x['index2'],df,'Var2',0.07) ,axis=1 ) 
print(df)

            Var1  Var2  Var3  Var4     index2      test
2014-12-31   5.0   0.0   0.0   0.0 2014-12-31  4.367194
2015-12-31   0.0   5.0   0.0   0.0 2015-12-31  4.672897
2016-12-31   0.0   0.0   5.0   0.0 2016-12-31  0.000000
2017-12-31   0.0   0.0   0.0   5.0 2017-12-31  0.000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52907160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档