问题描述
我已经构建了一个函数,我将 5 个投资组合的回报附加到我想要返回到变量的数据框中.当我逐行运行函数中的命令(一种调试)时,我最终得到具有正确数量的值(例如 5)的变量 'folioReturn'(这是我希望我的脚本返回的那个).但是如果我调用该函数,则只返回数据帧的第一个值.有谁知道我怎样才能得到整个数据框?
I have build a function where I append the returns of 5 portfolios to a dataframe which I want to return to a variable . When I run the commands within the function row by row(kind of debugging) I end upwith the variable 'folioReturn'(which is the one I want my script to return) having the right amount of values (e.x 5). But if I call the function, only the first value of the dataframe is returned. Does anyone know how I can get the whole dataframe ?
def portfolioReturns (securities, quintilesNo, perReturns):
'''
this function receives
1)securities: array with the security names and values ** for the purpose of our work the names
should already be sorted
2)quintilesNo: the number of portfolios we want to create
3)perReturns: an array with the returns that will be used for performance measuremnt
It returns an array with the returns for each portfolio
'''
# we calculate the number of securities per portfolio
stdFolioSize = np.divmod(securities.size, quintilesNo)[0] # we take the floor division
folioReturn = [] # pd.DataFrame()
# we create portfolios with equal number of securities except of the last one where we use all the remaining securities
for k in range(0, quintilesNo, 1): # in folio list we store the name of the securities we must include in each portfolio
if k < (quintilesNo - 1):
folioList = securities.index.get_level_values(1)[k * stdFolioSize : (k + 1) * stdFolioSize]
else: # the last portfolio will also include the remainder securities
folioList = securities.index.get_level_values(1)[k * stdFolioSize : securities.size]
# now that we have the list of the securities to be included in the folio, we use the table
# with the periodical returns to check the performance. The portfolio we construct is equally weighted
# first we drop one index(the first index of the country) and then we store all the periodical returns in one-array
perRetFinalTable = pd.DataFrame(perReturns.reset_index(level = 0, drop = True)).T
# using the list of the bonds we want to include in our portfolio we pick the bond returns and
# we store them in one array. Then we calculate the folio return
folio = perRetFinalTable[folioList]
folioReturn = np.append(folioReturn, folio.sum(axis = 1) * (1 / folio.size))
folioReturn = pd.DataFrame(folioReturn).T
# folioReturn = pd.Series(folioReturn).T
return (folioReturn)
推荐答案
return 语句必须在 for 循环之后,如果你想要整个列表在你的情况下在第一个循环中只返回值.只需从 for 循环中删除 return 它就可以正常工作.
return statement must be after the for loop if you want whole list in your case during the first loop only the value is returned. just remove the return from for loop it will work fine.
def portfolioReturns (securities, quintilesNo, perReturns):
'''
this function receives
1)securities: array with the security names and values ** for the purpose of our work the names
should already be sorted
2)quintilesNo: the number of portfolios we want to create
3)perReturns: an array with the returns that will be used for performance measuremnt
It returns an array with the returns for each portfolio
'''
# we calculate the number of securities per portfolio
stdFolioSize = np.divmod(securities.size, quintilesNo)[0] # we take the floor division
folioReturn = [] # pd.DataFrame()
# we create portfolios with equal number of securities except of the last one where we use all the remaining securities
for k in range(0, quintilesNo, 1): # in folio list we store the name of the securities we must include in each portfolio
if k < (quintilesNo - 1):
folioList = securities.index.get_level_values(1)[k * stdFolioSize : (k + 1) * stdFolioSize]
else: # the last portfolio will also include the remainder securities
folioList = securities.index.get_level_values(1)[k * stdFolioSize : securities.size]
# now that we have the list of the securities to be included in the folio, we use the table
# with the periodical returns to check the performance. The portfolio we construct is equally weighted
# first we drop one index(the first index of the country) and then we store all the periodical returns in one-array
perRetFinalTable = pd.DataFrame(perReturns.reset_index(level = 0, drop = True)).T
# using the list of the bonds we want to include in our portfolio we pick the bond returns and
# we store them in one array. Then we calculate the folio return
folio = perRetFinalTable[folioList]
folioReturn = np.append(folioReturn, folio.sum(axis = 1) * (1 / folio.size))
folioReturn = pd.DataFrame(folioReturn).T
# folioReturn = pd.Series(folioReturn).T
return (folioReturn)
这篇关于Python函数只返回第一个值而不是数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)