在不使用for循环的情况下将加权平均值提高到特定索引

时间:2018-08-27 21:33:59

标签: python-3.x pandas

我正在尝试查看大笔订单通过订单时的价格走势。我有订单簿快照数据,如下所示:

                         bid_price  bid_size  ask_price ask_size    level bid_size_cumsum   ask_size_cumsum
2018-08-27 14:25:30+00:00   6717.49 0.735502    6717.50 56.117221   0   0.735502    56.117221
2018-08-27 14:25:30+00:00   6717.22 0.300000    6717.56 0.018600    1   1.035502    56.135821
2018-08-27 14:25:30+00:00   6717.01 1.000000    6717.94 0.001000    2   2.035502    56.136821
2018-08-27 14:25:30+00:00   6717.00 2.500000    6718.30 0.001000    3   4.535502    56.137821
2018-08-27 14:25:30+00:00   6716.78 0.001000    6718.46 0.003000    4   4.536502    56.140821
2018-08-27 14:25:30+00:00   6716.25 0.617698    6718.95 2.225920    5   5.154200    58.366741
2018-08-27 14:25:30+00:00   6716.19 0.046394    6719.00 6.900000    6   5.200593    65.266741
2018-08-27 14:25:30+00:00   6715.00 0.001000    6719.20 0.001000    7   5.201593    65.267741
2018-08-27 14:25:30+00:00   6712.94 2.895080    6719.26 0.001000    8   8.096673    65.268741
2018-08-27 14:25:30+00:00   6710.98 1.033114    6719.96 0.001000    9   9.129787    65.269741
2018-08-27 14:25:30+00:00   6710.85 1.870000    6720.00 8.316950    10  10.999787   73.586691
2018-08-27 14:25:30+00:00   6710.78 0.306467    6720.01 0.001000    11  11.306254   73.587691
2018-08-27 14:25:30+00:00   6710.62 0.900000    6720.02 2.848228    12  12.206254   76.435919

级别是订单簿级别,因此级别0将是订单的顶部。 假设我想通过出价卖出数量10,从bid_size_cumsum中可以看到,当达到10级时,我将得到10。现在,我要计算平均出价,直到10级。这将是加权的平均标价出价大小。有没有一种方法可以计算(bid_price bid_size)/ total_size直到第10级,而无需使用For循环?

1 个答案:

答案 0 :(得分:1)

假设您的数据存储在df中。如果数据是数字,则可以将多个操作套用。 /添加和其他到您的数据:

ten_rows = df[:10]  # Slice first ten values from your data frame
result = ten_rows['bid_price'] * ten_rows['bid_size'] / ten_rows['bid_size_cumsum']

结果是目标加权平均值。 附言检查数据的dtype,是否会得到TypeErrordf.dtypes。如果您打算使用数学运算符,则应为int / float类型。