应用具有多个参数的函数并将值从列数据返回到新列

时间:2019-05-13 07:52:19

标签: python-3.x

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

我认为这应该是一个简单的解决方案,但似乎无法取得突破。

1 个答案:

答案 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函数可以达到相同的目的。