Это моя проблема: у меня есть DataFrame esp (около 5 миллионов строк), состоящий из трех столбцов, даты начала и времени, даты окончания и категории
DHE DHS CAT
0 2017-01-08 13:28:20 2017-01-08 13:43:13 43
1 2017-01-08 13:43:50 2017-01-08 13:45:39 43
2 2017-01-08 13:43:57 2017-01-08 13:46:18 43
3 2017-01-08 13:44:03 2017-01-08 13:46:32 43
4 2017-01-08 13:44:24 2017-01-08 13:53:29 43
DHE datetime64[ns]
DHS datetime64[ns]
CAT int64
dtype: object
У меня есть второй объект DataFrame ts (около 1 миллиона)строк), состоящий из одноминутных временных интервалов и столбца для каждой категории
ts = pd.DataFrame(data={str(i): 0 for i in np.sort(esp['CAT'].unique())},
index = pd.date_range(min(min(esp['DHE']), min(esp['DHS'])),
(max(max(esp['DHE']), max(esp['DHS'])) + pd.Timedelta(days=1)),
freq='min',
normalize=True))
41 42 43 45 46 47 48 50 52 53 54 55
2016-01-10 00:00:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:01:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:02:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:03:00 0 0 0 0 0 0 0 0 0 0 0 0
2016-01-10 00:04:00 0 0 0 0 0 0 0 0 0 0 0 0
dtype('<M8[ns]')
41 int64
42 int64
43 int64
45 int64
46 int64
47 int64
48 int64
50 int64
52 int64
53 int64
54 int64
55 int64
dtype: object
Я хотел бы иметь во втором таймфрейме количество отсчетов для всех временных интервалов по категории количества событийesp, который начался, но еще не закончился.
Поэтому я делаю следующее:
for index, row in esp.iterrows():
ts.loc[row['DHE'].floor('min'):row['DHS'].ceil('min'), str(row['CAT'])] += 1
Однако, это очень долго, потому что я не нашел решения, которое обходило бы использование дляпетля.Не могли бы вы помочь мне найти способ получения желаемого результата, который был бы быстрее (например, используя возможности векторизации numpy?)?