使用逻辑True / False聚合重新采样Pandas DataFrame

时间:2018-02-13 20:09:39

标签: python pandas aggregate resampling

很抱歉,如果标题没有立即清楚,但我想不出一个好方法来构建它。

我想在每天重新采样DataFrame时做一些高级逻辑。

所以我有一个名为trades的DataFrame,如下所示:

                         agg_tradeid    price  quantity  fst_tradeid  \
timestamp                                                              
2017-12-08 06:03:13.653            0  0.00023     100.0            0   
2017-12-08 06:08:00.292            1  0.00030    1999.0            1   
2017-12-08 06:09:05.218            2  0.00035    3339.0            2   
2017-12-08 06:09:17.911            3  0.00035     206.0            3   
2017-12-08 06:10:13.633            4  0.00033    1533.0            4   

                         lst_tradeid      timestamp     buy best_price  
timestamp                                                               
2017-12-08 06:03:13.653            0  1512712993653    True       True  
2017-12-08 06:08:00.292            1  1512713280292    True       True  
2017-12-08 06:09:05.218            2  1512713345218   False       True  
2017-12-08 06:09:17.911            3  1512713357911   False       True  
2017-12-08 06:10:13.633            4  1512713413633   False       True  

我想以一种复杂的方式重新采样到每日('1D')。

  • price: ohlc
  • quantity: sum
  • 创建一个新列ractquantity其中buy==True除以quantity的总重新采样1D

这是给我带来麻烦的最后一点,我可以通过以下方式完成其他2:

trades.resample('1D').agg({'price':'ohlc', 'quantity':'sum'})

1 个答案:

答案 0 :(得分:3)

您可以使用临时变量单独计算ract并将结果分配回来:

i = df.assign(v=df.quantity.where(df.buy))\
      .resample('1D')[['v', 'quantity']]\
      .sum()

j = df.resample('1D').agg({'price':'ohlc', 'quantity':'sum'})
j['ract'] = i.v / i.quantity

j

              price                            quantity      ract
               open     high      low    close quantity          
timestamp                                                        
2017-12-08  0.00023  0.00035  0.00023  0.00033   7177.0  0.292462