首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多参数函数不适用于数据帧

多参数函数不适用于数据帧
EN

Stack Overflow用户
提问于 2019-11-19 11:12:11
回答 1查看 59关注 0票数 0

我无法运行下面的代码。

我定义了一个接受多个参数的函数。当对数据进行硬编码时,该函数可以工作,但当将该函数应用于数据帧时-它不工作。我之前在dataframe中使用过不带参数的"apply“函数--它们工作得很好,但是一旦我使用这个带有多个参数的函数,它就会抛出一个错误。

代码语言:javascript
复制
import pandas as pd
import mibian

def IV(spot,strike,premium,cp):
    interest_rate = 10
    days_to_expiry = 11
    if cp == 'CE':
        c = mibian.BS([spot,strike,interest_rate,days_to_expiry],callPrice=premium)
        return c.impliedVolatility
    else:
        c = mibian.BS([spot,strike,interest_rate,days_to_expiry],putPrice=premium)
        return c.impliedVolatility

df = pd.DataFrame(
    {
        "Symbol": ['a','b','c','d'],
        "Spot":[100,200,300,400],
        "Strike":[105,205,305,405],
        "CP":['CE','PE','CE','PE'],
        "LTP":[2,3,4,5]
    }
)

df['IV'] = IV(df.Spot,df.Strike,df.LTP,df.CP)

**#df['IV'] = IV(100,105,5,'PE').round(decimals=2)**

df['IV'] = df['IV'].round(decimals=2)
print(df)

我得到下面的错误消息

代码语言:javascript
复制
Traceback (most recent call last):
  File "c:/Users/Arishka/Desktop/Python/iv_greeks.py", line 27, in <module>
    df['IV'] = IV(df.Spot,df.Strike,df.LTP,df.CP)
  File "c:/Users/Arishka/Desktop/Python/iv_greeks.py", line 10, in IV
    if cp == 'CE':
  File "C:\Users\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\generic.py", line 1552, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
EN

回答 1

Stack Overflow用户

发布于 2019-11-19 12:53:45

代码语言:javascript
复制
import pandas as pd
import mibian

def IV(x):
    spot, strike, premium, cp = x
    interest_rate = 10
    days_to_expiry = 11
    if cp == 'CE':
        c = mibian.BS([spot, strike, interest_rate, days_to_expiry], callPrice=premium)
        return c.impliedVolatility
    elif cp == 'PE':
        c = mibian.BS([spot, strike, interest_rate, days_to_expiry], putPrice=premium)
        return c.impliedVolatility

df = pd.DataFrame(
    {
        "Symbol": ['a','b','c','d'],
        "Spot":[100,200,300,400],
        "Strike":[105,205,305,405],
        "CP":['CE','PE','CE','PE'],
        "LTP":[2,3,4,5]
    }
)

df['IV'] = df[['Spot', 'Strike', 'LTP', 'CP']].apply(IV, axis=1)

结果

代码语言:javascript
复制
    Symbol  Spot    Strike  CP  LTP IV
0   a       100     105     CE  2   54.687500
1   b       200     205     PE  3   0.000010
2   c       300     305     CE  4   27.832031
3   d       400     405     PE  5   9.765625
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58926073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档