基于另一个熊猫数据框将熊猫数据框中的每一行除以同一熊猫数据框中的特定行

问题描述 投票:0回答:0

可重现的例子:

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']
)

我现在正在尝试找到最有效的方法(速度在这里非常重要)来执行以下操作:

  • 价差标的数据框为每个标的指定一个特定的价差标的
  • 如果 GBL 的基础价差为 TN10,那么我想将 GBL 行除以 TN10 行。
  • 如果 GBM 有 GBL 作为基础价差,那么我想将 GBM 行除以 GBL 行。
  • 如果 GBS 有 GBL 作为基础价差,那么我想将 GBS 行除以 GBL 行。

我现在只是将可重现的示例限制在一个名为波动率的列中,但这可能是任意数量的列,所以我正在寻找一个通用的解决方案。

希望有人能帮我解决这个问题。

问候,

盖永

在没有点差底层数据的情况下,只有一个点差底层,我使用以下代码(也许这也可以提高速度,但只是一个可能出现错误的想法):

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
python pandas dataframe numpy
© www.soinside.com 2019 - 2024. All rights reserved.