使用Pandas计算具有多索引的日期的值的乘积

时间:2015-08-07 16:49:05

标签: python pandas dataframe

我正在开发一个项目,该项目需要计算跨越日期的数据集的链接回报率。我当前的数据集(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的乘积。 我已经看了很多种方法,似乎无法弄清楚如何做到这一点,如果有人能为我阐明这一点,我将不胜感激。

感谢。

1 个答案:

答案 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