У меня есть два кадра данных, например.
более короткий период времени (4 часа)
Time Data_4h
1/1/01 00:00 1.1
1/1/01 06:00 1.2
1/1/01 12:00 1.3
1/1/01 18:00 1.1
2/1/01 00:00 1.1
2/1/01 06:00 1.2
2/1/01 12:00 1.3
2/1/01 18:00 1.1
3/1/01 00:00 1.1
3/1/01 06:00 1.2
3/1/01 12:00 1.3
3/1/01 18:00 1.1
Более длительный период времени (1 день)
Time Data_1d
1/1/01 00:00 1.1
2/1/01 00:00 1.6
3/1/01 00:00 1.0
Я хочу пометить данные более короткого временного интервала данными из данных более длинного временного интервала, но n-1 дней, оставив NaN там, где n-1 день не существует.
Например,
Окончательные объединенные данные, объединяющие 4 часа и 1 день
Time Data_4h Data_1d
1/1/01 00:00 1.1 NaN
1/1/01 06:00 1.2 NaN
1/1/01 12:00 1.3 NaN
1/1/01 18:00 1.1 NaN
2/1/01 00:00 1.1 1.1
2/1/01 06:00 1.2 1.1
2/1/01 12:00 1.3 1.1
2/1/01 18:00 1.1 1.1
3/1/01 00:00 1.1 1.6
3/1/01 06:00 1.2 1.6
3/1/01 12:00 1.3 1.6
3/1/01 18:00 1.1 1.6
Так что для 1/1 - он пытался найти 31/12, но не мог найти его, поэтому он был помечен как NaN. В течение 2/1 он искал 1/1 и помечал эти значения как 1.1 - значение для 1/1. В течение 3/1 он искал 2/1 и помечал их как 1.6 - значение для 2 / 1.
Важно отметить, что временные данные могут иметь большие пропуски. Поэтому я не могу получить доступ к строкам в большем таймфрейме напрямую.
Каков наилучший способ сделать это?
В настоящее время я перебираю все строки меньшего таймфрейма, а затем ищу дату более крупного таймфрейма, используя фильтр типа:
large_tf_data[(large_tf_data.index <= target_timestamp)][0]
Где target_timestamp рассчитывается для каждой строки в меньшем таймфрейме данных.
Это очень медленно! Любые предложения о том, как ускорить его?