Pil*_*lik 3 python time-series pandas
我想找到两个事件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
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
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
Run Code Online (Sandbox Code Playgroud)
我的问题与此相关,但更为复杂,因为在B事件之前可能会发生多个A事件。我已经对适当的解决方案进行了很多思考,但是还没有想出能够解决问题的方法。
您可以使用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})
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
该DatetimeIndex.searchsorted方法
没有大量文献记载,但它主要是对numpy.searchsorted的调用的瘦包装,该包装
可以处理表示为numpy datetime64的日期。
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |