b是Python的新手,似乎找不到适合我的问题的有效示例。
我编写了一个具有7个参数和6个返回值的函数。 (当您将参数定义为静态数字时,该函数可以正常工作。)
但是我需要7个参数来从我构造的(df)数据帧中的7个不同列中获取数据。
然后我想为同一df中的6个希腊字母返回值中的每一个创建6个新列。
到目前为止,我还没有尝试过以下方法:
df[['value', 'delta', 'gamma', 'theta', 'vega', 'rho']] = df.apply(lambda x: my_function(x['option_type'],x['forward price'],x['T'], x['off_peak'], x['Discount'], x['Discount_1'], x['off_peak_delta']), axis=1)
df
我的函数如下所示(为简单起见而缩短):
def my_function(option_type, fs, x, t, r, b, v):
if option_type == "a":
value = fs * math.exp((b - r) * t)
delta = math.exp(b - r)
gamma = math.exp((b - r) * fs)
theta = -(fs * v)
vega = fs * t__sqrt
rho = x * t
else
other_code
return value, delta, gamma, theta, vega, rho
我认为这应该是一个简单的解决方案,但似乎无法取得突破。
答案 0 :(得分:0)
这里的问题是您的my_function没有返回序列的正确“形式”。可能会有更优雅的表述,但可以进行以下工作:
def my_function(x1,x2,x3,x4, x5, x6, x7):
return pd.DataFrame({'value':[x2*math.exp(x6-x5)*x4],
'delta': [math.exp(x6-x5)],
etc...}).loc[0]
然后,您现有的lambda函数将起作用。请注意,dataframe-building dict的值是单元素函数,因此您实际上是在制作一个dataframe并采用第一行。正确的pd.Series函数可以达到相同的目的。