使用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))