diff options
Diffstat (limited to 'python/index_data.py')
| -rw-r--r-- | python/index_data.py | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/python/index_data.py b/python/index_data.py index 3be3b20f..dc97a3ed 100644 --- a/python/index_data.py +++ b/python/index_data.py @@ -113,22 +113,16 @@ def index_returns(df=None, index=None, series=None, tenor=None, from_date=None, pct_change(periods=per)) df.columns = ['spread_return', 'price_return'] df = df.groupby(level=['date', 'index', 'series', 'tenor']).nth(0) - coupon_data = pd.read_sql_query("SELECT index, series, tenor, coupon, maturity FROM " \ + coupon_data = pd.read_sql_query("SELECT index, series, tenor, coupon * 1e-4 AS coupon, maturity FROM " \ "index_maturity WHERE coupon is NOT NULL", _serenitas_engine, index_col=['index', 'series', 'tenor']) - def add_accrued(df): - coupon = coupon_data.loc[df.index[0][1:],'coupon'] * 1e-4 - accrued = (df.index.levels[0].to_series().diff(periods=per). - astype('timedelta64[D]')/360 * coupon) - return df + accrued - - df['price_return'] = (df. - groupby(level=['index', 'series', 'tenor'])['price_return']. - transform(add_accrued)) - - df = df.reset_index().merge(coupon_data.maturity.reset_index(),on=['index','series','tenor']) - df.set_index(['date', 'index', 'series', 'tenor', 'maturity'], inplace=True) + df = df.reset_index('date').join(coupon_data) + df['day_frac'] = (df.groupby(level=['index', 'series', 'tenor'])['date']. + diff(). + astype('timedelta64[D]') / 360) + df['price_return'] += df.day_frac * df.coupon + del df['day_frac'] return df def get_singlenames_quotes(indexname, date): |
