Заголовок кадра данных
strike,timestamp,optionType,IV,OptPrice,volume,spot,riskFree,divYield,mdate,ttm,volatility
11500.0,2019-04-03 09:21:23.035218,call,14.4,372.05,103.0,11713.2,0.0625,0.0112,2019-04-25 00:00:00.000000,0.05916,0.201913
11500.0,2019-04-03 09:21:23.035218,put,16.49,68.1,1173.0,11713.2,0.0625,0.0112,2019-04-25 00:00:00.000000,0.05916,0.144977
11500.0,2019-04-03 09:21:28.035640,call,14.4,372.05,103.0,11713.2,0.0625,0.0112,2019-04-25 00:00:00.000000,0.05916,0.201913
11500.0,2019-04-03 09:21:28.035640,put,16.49,68.1,1173.0,11713.2,0.0625,0.0112,2019-04-25 00:00:00.000000,0.05916,0.144977
11500.0,2019-04-03 09:21:33.036651,call,14.4,372.05,103.0,11713.2,0.0625,0.0112,2019-04-25 00:00:00.000000,0.05916,0.201914
Может быть считан в кадр данных путем вставки копии с кодом
import pandas as pd
df = pd.read_clipboard(sep=',')
def greeks(optionType, spot, strike, riskFree, ttm, vol, divYield=0):
<do something>
return [speed, zomma, color, ultima]
af = df.apply(lambda row: greeks(row["optionType"], row["spot"], row["strike"], row["riskFree"], row["ttm"], row["volatility"], row["divYield"]), axis=1)
Дает мне эту ошибку:
Shape of passed values is (5, 4), indices imply (5, 12)
Я пытался следовать этому SO ответу и второму комментарию к этому , но это не работает.
df['speed'], df['zomma'], df['color'], df['ultima'] = zip(*df.apply(lambda row: greeks(row["optionType"], row["spot"], row["strike"], row["riskFree"], row["ttm"], row["volatility"], row["divYield"]), axis=1))
Снова я получаю сообщение об ошибке, как и раньше.
Если я передаю подмножество df
, имеющее точно такое же количество столбцов, что и количество аргументов функции greeks
, который рассчитывает греки, код работает.
Как код ниже:
xf = df.iloc[:,[0,2,6,7,8,10,11]]
ef = xf.apply(lambda row: greeks(row["optionType"], row["spot"], row["strike"], row["riskFree"], row["ttm"], row["volatility"], row["divYield"]), axis=1)
ef = pd.DataFrame(item for item in ef)
xf = pd.concat([sf, cf], axis='columns')
Но это хлопот.Можем ли мы сделать так, чтобы функция могла быть применена к исходному кадру данных без поднабора, а затем снова присоединена к исходному кадру данных