(有效)对熊猫中的多个数据框进行递归迭代

时间:2018-08-29 20:05:47

标签: python pandas dataframe recursion optimization

因此,基本上,我正在使用大型市场数据集(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()函数似乎是迭代数据集的最快方法,但它会迭代整个数据集,除非像我上面所做的时间戳模糊测试那样满足特定条件。此外,我不确定熊猫中删除行的速度有多快。

注意事项:

  1. 时间戳以浮点格式具有十亿分之一秒的精度,但是 多个订单可能具有相同的时间戳。
  2. 可能有几个订单 看起来看起来完全一样,但是带有不同的时间戳
  3. 多个订单可能看起来完全一样,并且显示为 相同的时间戳,两个订单都需要找到单独的匹配项

那么你们怎么看?我将使用什么功能在熊猫中重新实现此算法?而且由于我正转向熊猫,我应该重新设计算法本身吗?我一直在玩迭代程序,但这似乎很慢,我想知道是否有某种方法可以在此处应用矢量化运算符。

感谢您的帮助,如果您有任何疑问,请告诉我。

1 个答案:

答案 0 :(得分:0)

Pandas默认执行递归操作Series和DataFrame。您可以将所有必要的数据收集到单个DataFrame中,然后对所需的过滤器使用布尔索引,以保留所需的数据。这将简化您的操作,因为您无需处理循环来遍历市场数据。另外,当您使用熊猫时,请勿使用“时间戳”列作为索引;您会发现某些数据集可能会发生错误。如果您还有其他问题,请随时提出,我们将尽我所能。