Объединение нескольких фреймов данных по индексу временного ряда с одинаковым временем начала и одинаковым временем окончания, но разными длинами - PullRequest
0 голосов
/ 18 декабря 2018

Я избивал себя за это.Хотя я думаю, что у меня все в порядке, я не убежден и хотел бы поделиться своим решением, чтобы кто-то сказал мне, да или нет?

Я хотел бы объединить несколько фреймов данных по индексу временного ряда с одним и тем же началомвремя и время окончания, но каждый кадр данных имеет разную длину.Затем я хотел бы убедиться, что любые разрывы во временном ряду выровнены для отсутствующих временных отметок, а пропущенные значения добавлены вперед в соответствии с данными в исходном фрейме данных.

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, который я опубликовал.
Если это не ясно, я с удовольствием выложу дополнительную информацию, чтобы помочь объяснить.

С наилучшими пожеланиями,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...