import datetime from analytics.curve_trades import curve_pos from analytics.index_data import index_returns import pandas as pd portf = curve_pos(datetime.date(2018, 5, 3), "ITRX") df = index_returns(index="EU", years=5, tenor=['3yr', '5yr', '7yr', '10yr']) df = (df.reset_index(['index'], drop=True). reorder_levels(['date', 'series', 'tenor'])) returns_otr = (df.spread_return.dropna(). unstack(-1). groupby(level='date', as_index=False). nth(-1)) portf.reset_pv() spreads = pd.DataFrame({'spread': portf.spread, 'tenor': [ind.tenor for ind in portf.indices]}) r = [] for k, v in returns_otr.iterrows(): portf.spread = spreads.spread.values * (1 + v.loc[spreads.tenor]) r.append((k[0], portf.pnl)) pnl = pd.DataFrame.from_records(r, columns=['date', 'pnl'], index=['date'])