【问题标题】:Running function through dataframe and receive the same value通过数据框运行函数并接收相同的值
【发布时间】:2021-03-16 08:24:22
【问题描述】:

我正在尝试运行此功能:

def delta(d_1, contract_type):
    if contract_type == 'c':
        return norm.cdf(d1)
    if contract_type == 'p':
        return -norm.cdf(-d_1)

通过这样的方式通过数据框:

S = test.strike
K = test.stock_price_close
t = test.TtM/365
r = test.Rf
sigma = test.VSMI
test.apply(lambda x: delta(d1,'p'), axis=1, raw=False, result_type='expand')

但得到与结果相同的值:

2001-11-01   -0.752478
2001-11-02   -0.752478
2001-11-05   -0.752478
2001-11-06   -0.752478
2001-11-08   -0.752478
                ...   
2006-10-26   -0.752478
2006-10-27   -0.752478
2006-10-30   -0.752478
2006-10-31   -0.752478
2006-11-01   -0.752478
Length: 960, dtype: float64

有什么想法吗?

【问题讨论】:

  • 您没有使用 lambda 变量 xd1 是错字吗?
  • 不,我是这样定义增量的。这里的代码: def d(sigma, S, K, r, t): d1 = 1 / (sigmasqrt(t)) * (log(S/K) + (r + sigma **2/2 )*t) d2 = d1 - sigma * sqrt(t) return d1, d2 def call_price(sigma, S, K, r, t, d1, d2): C = norm.cdf(d1)*S - norm.cdf (d2)*Knp.exp(-rt) return C def put_price(sigma, S, K, r, t): P = -norm.cdf(d1)*S - norm。 cdf(d2)*Knp.exp(-r *t) return P def delta(d_1, contract_type): if contract_type == 'c': return norm.cdf(d1) if contract_type == 'p ': return -norm.cdf(-d_1) d1, d2 = d(sigma, S, K, r, t )

标签: python function dataframe options delta


【解决方案1】:

如果您使用变量x,该函数只会返回变量答案。

如果您应用一个常数 lambda 函数,那么您将收到一个常数系列。例如

import pandas as pd
df = pd.DataFrame([1,2,3,4], columns=['col1'])
df['col1'].apply(lambda x: 5) # constant lambda function - x is not used

# constant series returned

0    5
1    5
2    5
3    5
Name: col1, dtype: int64

【讨论】:

  • 好的,但是我如何应用函数 delta 以使其逐行运行并为每一行产生另一个输出?抱歉,我对 python 很陌生,但不知何故无法完成。
  • 没有minimal reproducible example 很难说,但您可能需要在 lambda 函数中传递所有变量。即test.apply(lambda x: delta(x['strike'], x['stock_price_close'], x['ttm'...)), axis=1, raw=False, result_type='expand'),假设所有这些变量都在每一行中。
猜你喜欢
  • 1970-01-01
  • 2021-12-12
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多