Python Dataframe使用groupby在扩展/运行范围内应用函数

时间:2019-05-02 04:30:41

标签: python

使用Quantopian max_drawdown函数,我试图在扩展的数据范围内计算max_drawdown-因此,我期望有多个不同的输出。

from empyrical import max_drawdown
import pandas as pd

returns = pd.DataFrame({
        'value_date' : ['2018-01-31', '2018-02-28', '2018-03-31','2018-04-30', '2018-05-31', '2018-06-30', 
                        '2018-01-31', '2018-02-28', '2018-03-31','2018-04-30', '2018-05-31', '2018-06-30'],
        'code_id' :  ['AUD','AUD','AUD','AUD','AUD','AUD', 
                      'USD','USD','USD','USD','USD','USD'],
        'gross_return': [.01, .02, .03, -.4, -.06, -.02, 
                         .06, .8, .9, .4, -1.06, .03],
        })

这部分代码非常接近-但是它没有在扩展/运行,而是仅使用整个范围数据框(按code_id分组)。

returns['max_drawdown'] = returns.groupby(['code_id'])['gross_return'].transform(lambda x: max_drawdown(x))

我尝试了以下

returns['max_drawdown'] = returns.groupby(['code_id'])['gross_return'].expanding().transform(lambda x: max_drawdown(x))

但是得到`AttributeError:'ExpandingGroupby'对象没有属性'transform'

请提出任何想法

功能库

https://github.com/quantopian/empyrical/blob/master/empyrical/stats.py

更新

这有效

print(returns.groupby(['code_id'])['gross_return'].expanding().apply(lambda x: max_drawdown(x)))

但这不是TypeError: incompatible index of inserted column with frame index

returns['max_drawdown'] = returns.groupby(['code_id'])['gross_return'].expanding().apply(lambda x: max_drawdown(x))

0 个答案:

没有答案