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

2024-04-20 02:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe“data”,它有5列,第一列是开始时间,第二列是结束时间。我还有第二个数据帧,叫做“allu 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

上面也是“数据”的形状,下面是“所有时间”的形状:

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

那么,有没有一种方法可以让向量/矩阵运算更快呢?你知道吗


Tags: 数据dataframedata排序时间计数器minconcurrent