gpt4 book ai didi

python - 事件之间的时间( Pandas )

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:11 24 4
gpt4 key购买 nike

我想找到 2 个事件 A 和 B 之间耗时。更具体地说,每当事件 A 发生时,我想知道在下一次事件 B 发生之前需要多长时间。

看看这个例子:

import pandas as pd
import numpy as np

np.random.seed(5)
strings=list('AB')
data=[strings[i] for i in np.random.randint(0,2,15)]
index=pd.date_range('2/2/2012',periods=15,freq='T')
dfm=pd.DataFrame(data={'event':data},index=index)
dfm

event
2012-02-02 00:00:00 B
2012-02-02 00:01:00 A
2012-02-02 00:02:00 B
2012-02-02 00:03:00 B
2012-02-02 00:04:00 A
2012-02-02 00:05:00 A
2012-02-02 00:06:00 A
2012-02-02 00:07:00 B
2012-02-02 00:08:00 A
2012-02-02 00:09:00 A
2012-02-02 00:10:00 B
2012-02-02 00:11:00 A
2012-02-02 00:12:00 B
2012-02-02 00:13:00 A
2012-02-02 00:14:00 A

我的预期输出是:

begin           end
2012-02-02 00:01:00 2012-02-02 00:02:00
2012-02-02 00:04:00 2012-02-02 00:07:00
2012-02-02 00:05:00 2012-02-02 00:07:00
2012-02-02 00:06:00 2012-02-02 00:07:00
2012-02-02 00:08:00 2012-02-02 00:10:00
2012-02-02 00:09:00 2012-02-02 00:10:00
2012-02-02 00:11:00 2012-02-02 00:12:00

我的问题与 this one 有关但更复杂,因为多个 A 事件可以在 B 事件之前发生。我已经考虑了很多合适的解决方案,但还没有设法想出一些可以解决问题的方法。

最佳答案

您可以使用 searchsorted 查找开始日期将被插入到结束日期数组中的索引同时按排序顺序维护结束日期。这个索引数组告诉您将哪个结束日期与每个开始日期相关联。

import pandas as pd
import numpy as np

np.random.seed(5)
strings = list('AB')
data = [strings[i] for i in np.random.randint(0, 2, 15)]
index = pd.date_range('2/2/2012', periods=15, freq='T')
dfm = pd.DataFrame(data={'event': data}, index=index)


begin = dfm.loc[dfm['event'] == 'A'].index
cutoffs = dfm.loc[dfm['event'] == 'B'].index

idx = cutoffs.searchsorted(begin)
mask = idx < len(cutoffs)
idx = idx[mask]
begin = begin[mask]
end = cutoffs[idx]

result = pd.DataFrame({'begin':begin, 'end':end})

产量

                begin                 end
0 2012-02-02 00:01:00 2012-02-02 00:02:00
1 2012-02-02 00:04:00 2012-02-02 00:07:00
2 2012-02-02 00:05:00 2012-02-02 00:07:00
3 2012-02-02 00:06:00 2012-02-02 00:07:00
4 2012-02-02 00:08:00 2012-02-02 00:10:00
5 2012-02-02 00:09:00 2012-02-02 00:10:00
6 2012-02-02 00:11:00 2012-02-02 00:12:00

DatetimeIndex.searchsorted method没有大量记录,但主要是a thin wrapper关于 numpy.searchsorted 的电话它可以处理表示为 numpy datetime64s 的日期。

关于python - 事件之间的时间( Pandas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com