我正在开发一个项目,该项目需要计算跨越日期的数据集的链接回报率。我当前的数据集(df)是一个如下所示的数据框:
asof_date index_id ror
2015-01-31 x 0.004
2015-01-31 y 0.03
2015-01-31 z 0.4
2015-02-28 x 0.001
2015-02-28 y 0.02
2015-02-28 z 0.1
....
2015-06-30 x 0.1
2015-06-30 y -0.02
2015-06-30 z 0.4
df的当前索引是一个多级索引,由asof_date和index_id组成。
我想得到一个链接返回产生这样的东西:
index_id linked_ror
x 0.5
y 0.48
z 0.23
其中linked_ror是index_id在日期上的ror的乘积。 我已经看了很多种方法,似乎无法弄清楚如何做到这一点,如果有人能为我阐明这一点,我将不胜感激。
感谢。
答案 0 :(得分:0)
您可以在groupby
上使用level='index_id'
,然后汇总每个组以计算产品。
import pandas as pd
import numpy as np
# some artificial data
# ==============================
np.random.randn(0)
dates = ['2015-01-31','2015-02-28', '2015-03-31']
idx_id = list('xyz')
multi_index = pd.MultiIndex.from_product([dates, idx_id], names=['asof_date', 'index_id'])
df = pd.DataFrame(np.random.randint(1,5,9), index=multi_index, columns=['ror'])
print(df)
ror
asof_date index_id
2015-01-31 x 4
y 2
z 2
2015-02-28 x 2
y 1
z 3
2015-03-31 x 2
y 1
z 3
# processing
# ==========================
df.groupby(level='index_id')['ror'].agg(np.prod)
index_id
x 16
y 2
z 18
Name: ror, dtype: int64