你好,这是我第一次发问题。
用最简单的术语来说,我有一组买入订单和卖出订单,我试图根据单位和总单位确定每个买入订单的相应卖出价格。我正在使用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。
我知道这可能令人困惑,所以我道歉。我很难解释这个问题,花了几个小时在网上寻找解决方案。
更新我已经找到了一个不完美但接近准确的解决方案。我仍然希望听到更好的解决方案!我使用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中价格和总计单位的实际数据点。