提问者:小点点

将买卖数据与行不相等且增量不均匀的列['单位'、'总计单位'、'价格']匹配。加权单价问题


你好,这是我第一次发问题。

用最简单的术语来说,我有一组买入订单和卖出订单,我试图根据单位和总单位确定每个买入订单的相应卖出价格。我正在使用python,但在Excel中创建了一个示例,因为我认为它更容易解释。我试图解决绿色突出显示的列“卖出价格”。我通过使用pd获得了大致准确的答案。merge_asof(买,卖,上='TotalUnits',方向='最近'),然后回填匹配。但这种解决方案不考虑买卖之间的任何剩余单位。问题的例子

购买数据

出售数据

试图解决出售价格列

第4行的示例计算-售价109.58

我有两个数据集。第一个包含列为['Units','Total Units','Price','Sell Price']的买入订单。第二个包含列为['Units','Total Units','Price']的卖出订单。买入数据中的卖出价格列为空。

我正在尝试根据Units和Total Units的值确定买入数据中的每一行,卖出数据中的相应价格。确定价格取决于行和Total Units的顺序。

总结它的一种方法是,买入数据中的每一行都代表一个动作,它们一个接一个地发生。因此,对于买入数据的第1行,我将对照卖出数据第1行的单位值0.98检查单位值0.03。

  • 如果买入单位小于卖出单位,则可以完成全部买入单位。买入数据第一行的正确卖出价格是110。在第一个买入行被满足后,第一个卖出行还有0.95个单位(0.98-0.03)剩余。这些“剩余”单位将被应用到下一行,依此类推。
  • 如果买入单位大于卖出单位,则将从卖出数据中取加权平均值(单位和价格)计算卖出价格,直到卖出单位满足买入单位。在第4行中,买入单位=1,这正是发生的事情。

我知道这可能令人困惑,所以我道歉。我很难解释这个问题,花了几个小时在网上寻找解决方案。


共1个答案

匿名用户

更新我已经找到了一个不完美但接近准确的解决方案。我仍然希望听到更好的解决方案!我使用numpy. interp()函数“解决”了。我从buyData中输入总计单位和价格的函数数组,并从sellData中输入每个总计单位的值。结果将买入价格与卖出价格相匹配,而不是相反。

buyData.columns = ['price', 'unit', 'totalUnits']
sellData.columns = ['price', 'unit', 'totalUnits']

xp = np.asarray(buyData['totalUnits'].copy())
fp = np.asarray(buyData['price'].copy())

rr,cc = sellData.shape
sellData['buyPrice'] = 0

for r in np.arange(rr):
    price = sellData['totalUnits'].iloc[r].copy()
    xx = np.interp(price, xp,fp)
    sellData['buyPrice'].loc[r] = xx.copy()

这是结果。红色点表示计算的buyPrice,绿色点是buyData中价格和总计单位的实际数据点。