【发布时间】:2019-05-07 00:05:47
【问题描述】:
我有一个数据框,其中包含日期、现金、汇率、姓名等列。当我尝试按名称分组时,我能够找到 XIRR 的值,但是当我尝试按速率分组时,错误出现在
文件 "C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\zeros.py", 第 519 行,在布伦特 r = _zeros._brentq(f,a,b,xtol,rtol,maxiter,args,full_output,disp)
ValueError: f(a) and f(b) must have different signs"
def xnpv(rate, values, dates):
if rate <= -1.0:
return float('inf')
d0 = dates.min() # or min(dates)
return sum([ vi / (1.0 + rate)**((di - d0).days / 365.0) for vi, di in zip(values, dates)])
def xirr(values, dates):
try:
return scipy.optimize.newton(lambda r: xnpv(r, values, dates), 0.0)
except RuntimeError: # Failed to converge?
return scipy.optimize.brentq(lambda r: xnpv(r, values, dates), -1.0, 1e10)
def f(x):
x["XNPV"] = xnpv(0.1, x["Cash"], x['Date'])
x["XIRR"] = xirr( x["Cash"], x['Date'])
return x
f2 = f1.groupby('RATE').apply(f)
【问题讨论】:
标签: python python-3.x pandas-groupby valueerror