熊猫:使用聚合与MultiIndex

时间:2014-11-11 21:16:26

标签: python pandas aggregate finance

我对agg中正确使用pandas有疑问。我正在处理的具体问题是财务领域,更具体地说,是从完整限价订单簿中计算流动性指标。

我的数据包含订单簿的询问方(表示人们希望在特定时刻以及以何种价格出售的股票数量),我想计算在特定时刻购买50股的假设价格。例如,假设上午9点库存X的订单簿如下所示:

example_data=pd.DataFrame({'price':[100.023,100.031,100.039,100.109,100.219 ],'avail_shares':      [40,1,20,23,15],'midpoint':[99.996 ,99.996 ,99.996 ,99.996,99.996 ]})

其中价格是出售股票的价格,avail_shares是每个价格可用的股票数量,中点是订单簿中最佳要价和出价的平均值。为了获得流动性指标,考虑到大订单可以同时达到多个价格水平(即“走书”),我定义了以下成本交易(ctt)功能:

def ctt_ask(dfrm,level=50):
    dfrm['cumshares']=dfrm['avail_shares'].cumsum()
    dfrm['indicator']=0
    dfrm['indicator'].ix[dfrm.cumshares<level,]=dfrm.cumshares
    dfrm['indicator'].ix[(dfrm.cumshares>level) & (dfrm.cumshares.shift(1)<level),]=(level-  dfrm.cumshares.shift(1))
   liquidity_measure=((dfrm.price-dfrm.midpoint)*dfrm.indicator).sum()
    return liquidity_measure

对于上面的例子,这很好(即ctt_ask(example_data)得到2.90),但我的真实数据集有几个股票和许多日期时间(它有一个MultiIndex)。当我使用groupbyagg将此功能应用于每个股票日期时间组合(full_book_ask.groupby(level=[0,1]).agg(ctt_ask))时,我收到错误:KeyError: 'avail_shares'。这很奇怪,因为我的实际数据集中有一个名为avail_shares的列。我也尝试使用apply功能,但这会引发错误消息Exception: cannot handle a non-unique multi-index! 。我似乎无法弄清楚我在这里做错了什么。任何意见都会非常感激!

0 个答案:

没有答案