所以基本上我是在处理大量的市场数据(100000行)。数据集列的简化版本如下所示:
[Timestamp] [Price] [Shares] [orders] [side]
111.239 $23.28 200 2 B
111.240 $23.59 200 1 S
等等,这些数据是什么出来后,我们的市场解析软件提供了一个pcap文件。现在,我需要比较来自两个不同来源的相同市场数据的输出,以确保我们的市场数据解析器正常工作,而不是放弃订单或行为不一致。唯一的问题是时间戳略有不同,因为数据来自两个不同的来源。你知道吗
因此,我目前的方法是将这些数据集实现为字典列表,每个字典表示这些顺序中的一个。我有字典A和字典B,每一个代表两个源中的一个,并且每个都按时间戳排序。然后我选择一个“模糊因子”的时间,在这个例子中我将使用2秒。下面是我如何在psedou代码中进行比较:
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()函数似乎是遍历数据集的最快方法,但它会遍历整个数据集,直到满足特定的条件,就像我上面所做的时间戳模糊处理一样。此外,我不知道熊猫的排数下降有多快。你知道吗
需要注意的是:
你们怎么看?我将使用什么函数在pandas中重新实现这个算法?因为我要转移到熊猫身上,我应该重新调整算法本身吗?我一直在玩iterrows,但这似乎很慢,我想知道是否有一些方法,我可以在这里应用矢量化运算符。你知道吗
谢谢你的帮助,如果你有任何问题请告诉我。你知道吗
默认情况下,Pandas递归地执行序列和数据帧操作。您可以将所有必要的数据关联到一个数据帧中,然后使用布尔索引和所需的过滤器来保留所需的数据。这将简化您的操作一点,因为您不必处理循环来遍历您的市场数据。另一方面,当您使用pandas时,不要使用'Timestamp'列作为索引;您会发现某些数据集可能会发生错误。如果你还有什么问题尽管问,我会尽我所能帮助你的。你知道吗
相关问题 更多 >
编程相关推荐