Я пытаюсь использовать метод scipy.newton для оптимизации в кадре данных pandas.Newton Method in Pandas
Во-первых, мое создание фреймворка ниже. Во-вторых, создайте функцию Px. В-третьих, создайте еще одну функцию YieldCalc, где я использую scipy.newton для оптимизации, чтобы найти значение для Rate, такое, что Px = 0. Затем я пытаюсь добавить это значение в новый столбец «Выход», но получить следующую ошибку. Любая помощь приветствуется. Заранее спасибо.
from pandas import *
import pandas as pd
from scipy import *
import scipy
import timeit
#In:
#Creating Dataframe
df = DataFrame(list([100,2,34.1556,9,100]))
df = DataFrame.transpose(df)
df = df.rename(columns={0:'Face',1:'Freq',2:'N',3:'C',4:'Mkt_Price'})
df2= df
df = concat([df, df2])
df
#Out:
Face Freq N C Mkt_Price
100 2 34.1556 9 100
100 2 34.1556 9 100
#In:
Face = df['Face']
Freq = df['Freq']
N = df['N']
C = df['C']
Mkt_Price = df['Mkt_Price']
def Px(Rate):
return Mkt_Price - (Face * (1 + Rate/Freq) ** (- N) + (C/Rate) * (1 - (1 + (Rate/Freq)) ** -N))
def YieldCalc():
return scipy.optimize.newton(Px, .1, tol=.0001, maxiter=100)
df['Yield'] = YieldCalc()
Ошибка/выход:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-89-f4961d3f817b> in <module>()
12 def YieldCalc(Rate):
13 return scipy.optimize.newton(Px, .1, tol=.0001, maxiter=100)
---> 14 df['Yield'] = YieldCalc(.05)
<ipython-input-89-f4961d3f817b> in YieldCalc(Rate)
11
12 def YieldCalc(Rate):
---> 13 return scipy.optimize.newton(Px, .1, tol=.0001, maxiter=100)
14 df['Yield'] = YieldCalc(.05)
C:\Users\rebortz\Anaconda\lib\site-packages\scipy\optimize\zeros.pyc in newton(func, x0, fprime, args, tol, maxiter, fprime2)
145 q1 = func(*((p1,) + args))
146 for iter in range(maxiter):
--> 147 if q1 == q0:
148 if p1 != p0:
149 msg = "Tolerance of %s reached" % (p1 - p0)
C:\Users\rebortz\Anaconda\lib\site-packages\pandas\core\generic.pyc in __nonzero__(self)
674 raise ValueError("The truth value of a {0} is ambiguous. "
675 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 676 .format(self.__class__.__name__))
677
678 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Записывает ли значение '.values' в ваши столбцы (как в' Mkt_price.values')? Iirc, стандартные булевы операции с файловыми кадрами pandas не совпадают с матрицами numpy. – FooBar
Просто попробовал. Не работал. –
Кроме того, если вы вставляете 'df [' Yield '] = Px (.05)', он создает новый столбец с Px() для этой скорости. Поэтому я думаю, что это как-то связано с формулой YieldCalc. –