首页 > 解决方案 > 应用具有多个参数的函数并将列数据中的值返回到新列

问题描述

b对 Python 来说相对较新,似乎无法为我的问题找到一个可行的示例。

我写了一个有 7 个参数和 6 个返回值的函数。(当您将参数定义为静态数字时,该函数可以正常工作)。

但是,我需要 7 个参数来从我构建的数据框中的 7 个不同列中获取数据(df)。

然后,我想为同一个 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

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

标签: python-3.x

解决方案


这里的问题是你的 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 函数将起作用。请注意,构建数据框的 dict 的值是单元素函数,因此您实际上是在制作数据框并获取第一行。使用正确的 pd.Series 函数也可以实现相同的目的。


推荐阅读