Я избивал себя за это.Хотя я думаю, что у меня все в порядке, я не убежден и хотел бы поделиться своим решением, чтобы кто-то сказал мне, да или нет?
Я хотел бы объединить несколько фреймов данных по индексу временного ряда с одним и тем же началомвремя и время окончания, но каждый кадр данных имеет разную длину.Затем я хотел бы убедиться, что любые разрывы во временном ряду выровнены для отсутствующих временных отметок, а пропущенные значения добавлены вперед в соответствии с данными в исходном фрейме данных.
DataFrame1
Time O H L C Symbol
00:00:00 2 3 1 1 XXX/XXX
01:00:00 1 4 1 1 XXX/XXX
02:00:00 1 4 1 1 XXX/XXX
03:00:00 1 4 1 1 XXX/XXX
04:00:00 2 3 1 1 XXX/XXX
05:00:00 1 3 1 1 XXX/XXX
06:00:00 1 3 1 1 XXX/XXX
07:00:00 2 4 1 1 XXX/XXX
08:00:00 2 3 1 1 XXX/XXX
09:00:00 1 4 1 1 XXX/XXX
10:00:00 1 3 1 1 XXX/XXX
11:00:00 2 4 1 1 XXX/XXX
12:00:00 1 4 1 1 XXX/XXX
13:00:00 2 3 1 1 XXX/XXX
14:00:00 2 4 1 1 XXX/XXX
Len = 15
DataFrame2:
Time O H L C Symbol
00:00:00 2 3 1 1 XXX/YYY
01:00:00 1 4 1 1 XXX/YYY
02:00:00 1 4 1 1 XXX/YYY
03:00:00 1 4 1 1 XXX/YYY
04:00:00 2 3 1 1 XXX/YYY
06:00:00 1 3 1 1 XXX/YYY
07:00:00 1 3 1 1 XXX/YYY
08:00:00 2 4 1 1 XXX/YYY
09:00:00 2 3 1 1 XXX/YYY
10:00:00 1 4 1 1 XXX/YYY
12:00:00 1 3 1 1 XXX/YYY
13:00:00 2 4 1 1 XXX/YYY
14:00:00 1 4 1 1 XXX/YYY
Len = 13
DataFrame3:
Time O H L C Symbol
00:00:00 2 3 1 1 XXX/ZZZ
02:00:00 1 4 1 1 XXX/ZZZ
03:00:00 1 4 1 1 XXX/ZZZ
04:00:00 1 4 1 1 XXX/ZZZ
05:00:00 2 3 1 1 XXX/ZZZ
06:00:00 1 3 1 1 XXX/ZZZ
07:00:00 1 3 1 1 XXX/ZZZ
08:00:00 2 4 1 1 XXX/ZZZ
10:00:00 1 4 1 1 XXX/ZZZ
11:00:00 1 3 1 1 XXX/ZZZ
12:00:00 2 4 1 1 XXX/ZZZ
14:00:00 1 4 1 1 XXX/ZZZ
Len = 12
Конечный результат долженцель будет: Выровненный фрейм данных, который показывает все данные перед заполнением вперед
Time O H L C Symbol Time O H L C Symbol Time O H L C Symbol
00:00:00 2 3 1 1 XXX/XXX 00:00:00 2 3 1 1 XXX/YYY 00:00:00 2 3 1 1 XXX/ZZZ
01:00:00 1 4 1 1 XXX/XXX 01:00:00 1 4 1 1 XXX/YYY 01:00:00 nan nan nan nan nan
02:00:00 1 4 1 1 XXX/XXX 02:00:00 1 4 1 1 XXX/YYY 02:00:00 1 4 1 1 XXX/ZZZ
03:00:00 1 4 1 1 XXX/XXX 03:00:00 1 4 1 1 XXX/YYY 03:00:00 1 4 1 1 XXX/ZZZ
04:00:00 2 3 1 1 XXX/XXX 04:00:00 2 3 1 1 XXX/YYY 04:00:00 1 4 1 1 XXX/ZZZ
05:00:00 1 3 1 1 XXX/XXX 05:00:00 nan nan nan nan nan 05:00:00 2 3 1 1 XXX/ZZZ
06:00:00 1 3 1 1 XXX/XXX 06:00:00 1 3 1 1 XXX/YYY 06:00:00 1 3 1 1 XXX/ZZZ
07:00:00 2 4 1 1 XXX/XXX 07:00:00 1 3 1 1 XXX/YYY 07:00:00 1 3 1 1 XXX/ZZZ
08:00:00 2 3 1 1 XXX/XXX 08:00:00 2 4 1 1 XXX/YYY 08:00:00 2 4 1 1 XXX/ZZZ
09:00:00 1 4 1 1 XXX/XXX 09:00:00 2 3 1 1 XXX/YYY 09:00:00 nan nan nan nan nan
10:00:00 1 3 1 1 XXX/XXX 10:00:00 1 4 1 1 XXX/YYY 10:00:00 1 4 1 1 XXX/ZZZ
11:00:00 2 4 1 1 XXX/XXX 11:00:00 nan nan nan nan nan 11:00:00 1 3 1 1 XXX/ZZZ
12:00:00 1 4 1 1 XXX/XXX 12:00:00 1 3 1 1 XXX/YYY 12:00:00 2 4 1 1 XXX/ZZZ
13:00:00 2 3 1 1 XXX/XXX 13:00:00 2 4 1 1 XXX/YYY 13:00:00 nan nan nan nan nan
14:00:00 2 4 1 1 XXX/XXX 14:00:00 1 4 1 1 XXX/YYY 14:00:00 1 4 1 1 XXX/ZZZ
Я выбрал следующий подход: объединить каждый фрейм данных по индексу времени
> table =
> DataTableEurUsd.reset_index("Time").join(DataTableAudUsd.reset_index("Time"),
> lsuffix="_y", rsuffix="_x").join(DataTableEurChf.reset_index("Time"),
> lsuffix="_y", rsuffix="_x")
Где:
DataTableEurUsd =
Open High Low Close RealVolume Spread TickVolume Symbol
Time
2010.01.04 00:00:00 1.43259 1.43336 1.43151 1.43153 0.0 12.0 969.0 EURUSD
2010.01.04 01:00:00 1.43151 1.43153 1.42879 1.42886 0.0 15.0 2098.0 EURUSD
2010.01.04 02:00:00 1.42885 1.42885 1.42569 1.42705 0.0 15.0 2082.0 EURUSD
2010.01.04 03:00:00 1.42702 1.42989 1.42700 1.42939 0.0 14.0 1544.0 EURUSD
2010.01.04 05:00:00 1.42938 1.42968 1.42718 1.42848 0.0 15.0 1131.0 EURUSD
DataTableAudUsd =
Open High Low Close RealVolume Spread TickVolume Symbol
Time
2010.01.04 00:00:00 0.89938 0.89953 0.89709 0.89711 0.0 30.0 1144.0 AUDUSD
2010.01.04 01:00:00 0.89712 0.89795 0.89612 0.89632 0.0 35.0 1735.0 AUDUSD
2010.01.04 02:00:00 0.89634 0.89645 0.89372 0.89500 0.0 30.0 1771.0 AUDUSD
2010.01.04 04:00:00 0.89502 0.89653 0.89502 0.89613 0.0 35.0 1242.0 AUDUSD
2010.01.04 05:00:00 0.89611 0.89648 0.89479 0.89633 0.0 30.0 663.0 AUDUSD
DataTableEurChf =
Open High Low Close RealVolume Spread TickVolume Symbol
Time
2010.01.04 00:00:00 1.48238 1.48354 1.48227 1.48334 0.0 36.0 1232.0 EURCHF
2010.01.04 02:00:00 1.48327 1.48470 1.48087 1.48250 0.0 34.0 2186.0 EURCHF
2010.01.04 03:00:00 1.48251 1.48311 1.48150 1.48294 0.0 34.0 1939.0 EURCHF
2010.01.04 04:00:00 1.48292 1.48317 1.48114 1.48239 0.0 34.0 1510.0 EURCHF
2010.01.04 05:00:00 1.48235 1.48245 1.48150 1.48181 0.0 34.0 1230.0 EURCHF
Затем я добавлю данные на Nan
table = table.fillna(method='ffill')
. Я хочу убедиться, что все исходные данные остаются на своем месте, и индекс временных рядов заполняется.в пропущенные часы по индексу, как на скриншоте Excel, который я опубликовал.
Если это не ясно, я с удовольствием выложу дополнительную информацию, чтобы помочь объяснить.
С наилучшими пожеланиями,