У меня есть скрипт, который генерирует кадры данных, содержащие «блоки» дат, и сохраняет их в переменной «cur_blocks», такой как эта:
year start end date
gmt_reportedtime
2019-03-11 2000 2000-01-09 2000-03-10 2019-03-11
2019-03-11 2001 2001-01-09 2001-03-10 2019-03-11
2019-03-11 2002 2002-01-09 2002-03-10 2019-03-11
2019-03-11 2003 2003-01-09 2003-03-10 2019-03-11
2019-03-11 2004 2004-01-09 2004-03-10 2019-03-11
У меня также есть еще один фрейм данных 'col', проиндексированный на datetime, в котором есть данные, которые я хотел бы выполнить в последующих вычислениях, таких как ранжирование и z-оценки. Я хотел бы нарезать несколько кусков col, используя блоки, обозначенные как 'start' и 'end' из cur_blocks. Блоки данных в cur_blocks - это 60-дневные окна, каждое из которых разделено на 1 год в период между 2000-2019 гг.
Вот 'col':
X
2000-01-01 24
2000-01-02 90
2000-01-03 62
2000-01-04 10
...
2019-02-28 73
2019-03-01 96
[7000 rows x 1 columns]
Пока я решил это так:
window_aggregate = pd.DataFrame()
for index, block in cur_blocks.iterrows():
dt_block = col.loc[block['start']:block['end']]
window_aggregate = pd.concat([window_aggregate, dt_block])
Затем я могу использовать 'window_aggregate' для выполнения последующей работы. Это работает, однако это очень медленно, потому что 'cur_blocks' генерируется для каждой отдельной даты между 2000-01-01 и сегодняшним днем.
Я удивлен, что в пандах нет встроенной функции для такого рода вещей? Если я не пропустил это? Но другой пользователь при переполнении стека также задал похожий вопрос, на который до сих пор не ответили здесь
Недавно я опубликовал вопрос, детализирующий более широкую проблему здесь , хотя написанный мною код в основном решает проблему, он слишком медленный для практических целей.
Я видел, как это решалось за один день в течение нескольких лет здесь но не с окном.
Может быть решение здесь , но я не понимаю, как применить ответ к моим данным
РЕДАКТИРОВАТЬ: показать желаемый результат примерно так, как показано ниже, с датами в кадре данных, соответствующими начальному и конечному блокам в cur_blocks
желаемый выход
X
2000-01-09 24
2000-01-10 90
...
2000-03-10 62
2001-01-09 10
2001-01-10 10
...
2001-03-10 10
2002-01-09 10
...
...
...
2004-03-10 73