如何将使用pandas数据帧作为查找表的循环进行矢量化?

时间:2017-09-06 16:20:30

标签: python pandas

我有一个数据帧“data”,它有5列,第一列是开始时间,第二列是结束时间。我有一个名为“all_times”的第二个数据帧,它是所有开始和结束时间的排序数据帧,并且通过获取值随时间的累积和来计算并发计数器。每个开始时间为该值的+1,每个结束时间为该值的-1。我试图找到每个“数据”行中范围内的并发数的最小值/最大值。

我想出了一个如下所示的循环,它适用于我的目的,但速度非常慢。我该如何对这个循环进行矢量化?

data['min_concurrent'] = 0
data['max_concurrent'] = 0

for i in range(data.shape[0]):
    timeranges = all_times[data.iloc[i,0]:data.iloc[i,1]]['cumsum']
    data.iloc[i,5] = timerange['cumsum'].min()
    data.iloc[i,6] = timerange['cumsum'].max()

所需输出的示例:

start                   end                     ... min  max
2017-01-01 00:00:02.187 2017-01-01 00:00:02.437 ...  1    1
2017-01-01 00:00:03.000 2017-01-01 00:00:04.000 ...  1    2
2017-01-01 00:00:03.700 2017-01-01 00:00:05.000 ...  1    2
2017-01-01 00:00:04.100 2017-01-01 00:00:04.200 ...  2    2
2017-01-01 00:00:04.500 2017-01-01 00:00:06.000 ...  1    2

上面也是“数据”的形状,下面是“all_times”的形状:

timestamp                value     cumsum
2017-01-01 00:00:02.187  +1          1
2017-01-01 00:00:02.437  -1          0
2017-01-01 00:00:03.000  +1          1
2017-01-01 00:00:03.700  +1          2
2017-01-01 00:00:04.000  -1          1
2017-01-01 00:00:04.100  +1          2
2017-01-01 00:00:04.200  -1          1
2017-01-01 00:00:04.500  +1          2
2017-01-01 00:00:05.000  -1          1
2017-01-01 00:00:06.000  -1          0

那么,有没有办法让矢量/矩阵运算更快?

0 个答案:

没有答案