python-3.x - 应用具有多个参数的函数并将列数据中的值返回到新列
问题描述
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
我认为这应该是一个直截了当的解决方案,但似乎无法取得突破。
解决方案
这里的问题是你的 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 函数也可以实现相同的目的。
推荐阅读
- liferay - 如何获取用户活动?
- reactjs - 反应:未捕获的类型错误:无法读取未定义的属性“确切”
- python - GroupBox 与 radioButtons 启用另一个 groupBox 不保持按钮状态
- php - 从 phpmailer 网络表单中的地址设置
- python - 获取 Python 中所有可能的变量/参数组合,但始终包括所有变量
- python - django 信号模块对象没有属性'post_save'
- sql - 当我使用内部联接时,我的一些行被删除了
- list - 检查两个键在字典列表中是否具有不同的值
- java - 打印最大元素及其索引位置
- .net - 对从 MongoDB 获取的数据库列表进行排序