首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图使用另一列使用函数获取数据列中的值?

试图使用另一列使用函数获取数据列中的值?
EN

Stack Overflow用户
提问于 2022-03-21 19:04:24
回答 2查看 63关注 0票数 0

我目前有一个数据框架"Finaldf“,包括一个列(underlying_price,strike,rate,days_to_exp,price,IV)。看起来是这样的-

代码语言:javascript
复制
import pandas as pd
import mibian
stocksdf = {'underlying_price': [82600,38900,28775,28900,28275],
            'strike': [30400,19050,34000,36500,34500],
            'rate': [0,0,0,0,0],
            'days_to_exp': [3,3,3,3,3],
            'price': [12,3,4,8,3.5],
            'Opt_type': ['CE', 'PE', 'PE', 'PE', 'PE']}
final=pd.DataFrame(stocksdf)
final['IV']=""
print(final)

产出-

代码语言:javascript
复制
   underlying_price  strike  rate    days_to_exp  price Opt_type  IV
0             82600   30400   3.81            3   12.0       CE       
1             38900   19050   3.81            3    3.0       PE       
2             28775   34000   3.81            3    4.0       PE       
3             28900   36500   3.81            3    8.0       PE       
4             28275   34500   3.81            3    3.5       PE       

我有一个函数来计算“最终”数据框架的"ImpVol“列,如下所示:

代码语言:javascript
复制
def impliedVol_Call(underlying_price, strike, rate, days_to_exp, price):
    c = mibian.BS([underlying_price, strike, rate,
                  days_to_exp], callPrice=price)
    Call_IV = c.impliedVolatility
    return Call_IV



def impliedVol_Put(underlying_price, strike, rate, days_to_exp, price):
    p = mibian.BS([underlying_price, strike, rate,
                  days_to_exp], putPrice=price)
    Put_IV = p.impliedVolatility
    return Put_IV

所以我试着像这样计算"IV“列-

代码语言:javascript
复制
for i in range(len(final)):
if pd.isna(final["Opt_type"].iloc[i]=='CE'):
    final['IV'].iloc[i]=impliedVol_Call(final['Underlying_price'][i],final['strike'][i],final['rate'][i],final['time_toEx'][i],final['Premium_price'][i])
else:
    final['IV'].iloc[i]=impliedVol_Put(final['Underlying_price'][i],final['strike'][i],final['rate'][i],final['time_toEx'][i],final['Premium_price'][i])

请帮我找到ImVol(IV)的专栏。

EN

回答 2

Stack Overflow用户

发布于 2022-03-22 05:21:25

嗯,你所做的是以迭代的方式。您可以探索lambdas函数并在dataframe上应用方法。

下面是示例代码,您可以根据需要修改这些代码。由于我没有您的impliedVol_Put函数方法论,所以我只能建议您如何修改这个方法。

代码语言:javascript
复制
final['ImpVol'] = final.apply(lambda x: impliedVol_Call(final['Underlying_price'][i],final['strike'][i],final['rate'][i],final['time_toEx'][i],final['Premium_price'][i])
                    if pd.isna(final["Opt_type"].iloc[i]=='CE') else impliedVol_Put(final['Underlying_price'][i],final['strike'][i],final['rate'][i],final['time_toEx'][i],final['Premium_price'][i]),
                    axis=1)
票数 0
EN

Stack Overflow用户

发布于 2022-03-21 19:20:34

也许可以用列作为参数调用lambda中的函数impliedVol_Call。

代码语言:javascript
复制
finaldf['ImpVol']=finaldf.apply(lambda x:impliedVol_Call(x[0],x[1],x[2],x[3],x[4]))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71562843

复制
相关文章

相似问题

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