我目前有一个数据框架"Finaldf“,包括一个列(underlying_price,strike,rate,days_to_exp,price,IV)。看起来是这样的-
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)产出-
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“列,如下所示:
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“列-
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)的专栏。
发布于 2022-03-22 05:21:25
嗯,你所做的是以迭代的方式。您可以探索lambdas函数并在dataframe上应用方法。
下面是示例代码,您可以根据需要修改这些代码。由于我没有您的impliedVol_Put函数方法论,所以我只能建议您如何修改这个方法。
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)发布于 2022-03-21 19:20:34
也许可以用列作为参数调用lambda中的函数impliedVol_Call。
finaldf['ImpVol']=finaldf.apply(lambda x:impliedVol_Call(x[0],x[1],x[2],x[3],x[4]))https://stackoverflow.com/questions/71562843
复制相似问题