可重现的例子:
import pandas as pd
df = pd.DataFrame(
list(zip(['TN10', 'GBL', 'GBM', 'GBS'], [0.10, 0.15, 0.12, 0.13])),
columns=['underlying','volatility']
)
df_spread = pd.DataFrame(
list(zip(['GBL', 'GBM', 'GBS'], ['TN10', 'GBL', 'GBL'])),
columns=['underlying','spread_underlying']
)
我现在正在尝试找到最有效的方法(速度在这里非常重要)来执行以下操作:
我现在只是将可重现的示例限制在一个名为波动率的列中,但这可能是任意数量的列,所以我正在寻找一个通用的解决方案。
希望有人能帮我解决这个问题。
问候,
盖永
在没有点差底层数据的情况下,只有一个点差底层,我使用以下代码(也许这也可以提高速度,但只是一个可能出现错误的想法):
def get_spread(df, spread_underlyin):
if not spread_underlying:
return df
if (df['underlying'] == spread_underlying).any():
spread_underlying_row = df.loc[df['underlying'] == spread_underlying, 'rvol_0':'rvol_lookback_4'].iloc[0]
df.loc[
df['underlying'] != spread_underlying,
'rvol_0':'rvol_lookback_4'
] /= spread_underlying_row
return df