因此,基本上,我正在使用大型市场数据集(100,000行)。数据集列的简化版本如下:
[时间戳记] [价格] [份额] [订单] [边]
111.239 $ 23.28 200 2 B
111.240 $ 23.59 200 1秒
等等。这些数据是从我们的市场分析软件中获得的pcap文件。现在,我需要比较来自两个不同来源的相同市场数据的输出,以确保我们的市场数据解析器正常工作,并且不会出现掉单或行为不一致的情况。唯一的问题是时间戳略有不同,因为数据来自两个不同的来源。
所以我目前的方法是将这些数据集实现为字典列表,每个字典代表这些顺序之一。我有字典A和字典B,每个字典代表两个源之一,并且每个字典都按时间戳排序。然后,我选择时间的“模糊因素”,在此示例中,我将使用2秒。这是我在pseduo代码中进行比较的方法:
for item1 in dictionaryA:
for item 2 in dictionaryB
if the item2[timestamp] is over 2 seconds before item1[timestamp]:
remove item from dictionaryB
elif item2[timestamp] is over 2 seconds after item1[timestamp]:
mark item1 as not matched
break
else: # We are in 2 second fuzz factor:
compare the items, if a match is found:
Mark item 1 in dictionaryA as matched
Remove item2 from dictionary
break
因此,如您所见,我在遍历字典A时不断从字典B中删除项目,从而加快了处理速度。由于大多数项目与之匹配,因此可以大大加快处理速度。但是我不确定如何在熊猫中做这样的事情。 apply()函数似乎是迭代数据集的最快方法,但它会迭代整个数据集,除非像我上面所做的时间戳模糊测试那样满足特定条件。此外,我不确定熊猫中删除行的速度有多快。
注意事项:
那么你们怎么看?我将使用什么功能在熊猫中重新实现此算法?而且由于我正转向熊猫,我应该重新设计算法本身吗?我一直在玩迭代程序,但这似乎很慢,我想知道是否有某种方法可以在此处应用矢量化运算符。
感谢您的帮助,如果您有任何疑问,请告诉我。
答案 0 :(得分:0)
Pandas默认执行递归操作Series和DataFrame。您可以将所有必要的数据收集到单个DataFrame中,然后对所需的过滤器使用布尔索引,以保留所需的数据。这将简化您的操作,因为您无需处理循环来遍历市场数据。另外,当您使用熊猫时,请勿使用“时间戳”列作为索引;您会发现某些数据集可能会发生错误。如果您还有其他问题,请随时提出,我们将尽我所能。