La fusión de múltiples tramas de datos a lo largo de un Índice de series de tiempo con la misma hora de inicio y hora de finalización misma pero con diferentes longitudes

votos
0

He estado golpeando mi mismo sobre esto. Aunque creo que lo tengo no me convence y me gustaría compartir mi solución para que alguien me diga sí o no?

Me gustaría unirse a múltiples tramas de datos a lo largo de un índice de series de tiempo con el mismo tiempo de inicio y hora de finalización, pero cada trama de datos es de una longitud diferente. Después me gustaría para asegurar que cualquier abertura en la serie de tiempo se vuelven a alinear las marcas de tiempo para los que faltan y los valores que faltan se rellenan con interés relevante para los datos de la trama de datos original.

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

El resultado final debe aspirar a ser: trama de datos Alineado que muestra todos los datos antes de relleno hacia adelante

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

El enfoque que he tomado es: a concat cada trama de datos a lo largo del índice del Tiempo

> table =
> DataTableEurUsd.reset_index(Time).join(DataTableAudUsd.reset_index(Time),
> lsuffix=_y, rsuffix=_x).join(DataTableEurChf.reset_index(Time),
> lsuffix=_y, rsuffix=_x)

Dónde:

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

Entonces lo haré delante Pad en el Nan

table = table.fillna(method='ffill')

Quiero para asegurarse de que todas las estancias de datos originales en su lugar correcto y el índice de series de tiempo se llena en las horas que faltan en el índice como en la captura de pantalla de Excel que he publicado.
Si esto no está claro que estoy feliz de publicar más información para ayudar a explicar.

Los mejores deseos,

Publicado el 18/12/2018 a las 11:13
fuente por usuario
En otros idiomas...                            


1 respuestas

La fusión de múltiples tramas de datos a lo largo de un Índice de series de tiempo con la misma hora de inicio y hora de finalización misma pero con diferentes longitudes

votos
0

He estado golpeando mi mismo sobre esto. Aunque creo que lo tengo no me convence y me gustaría compartir mi solución para que alguien me diga sí o no?

Me gustaría unirse a múltiples tramas de datos a lo largo de un índice de series de tiempo con el mismo tiempo de inicio y hora de finalización, pero cada trama de datos es de una longitud diferente. Después me gustaría para asegurar que cualquier abertura en la serie de tiempo se vuelven a alinear las marcas de tiempo para los que faltan y los valores que faltan se rellenan con interés relevante para los datos de la trama de datos original.

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

El resultado final debe aspirar a ser: trama de datos Alineado que muestra todos los datos antes de relleno hacia adelante

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

El enfoque que he tomado es: a concat cada trama de datos a lo largo del índice del Tiempo

> table =
> DataTableEurUsd.reset_index("Time").join(DataTableAudUsd.reset_index("Time"),
> lsuffix="_y", rsuffix="_x").join(DataTableEurChf.reset_index("Time"),
> lsuffix="_y", rsuffix="_x")

Dónde:

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

Entonces lo haré delante Pad en el Nan

table = table.fillna(method='ffill')

Quiero para asegurarse de que todas las estancias de datos originales en su lugar correcto y el índice de series de tiempo se llena en las horas que faltan en el índice como en la captura de pantalla de Excel que he publicado.
Si esto no está claro que estoy feliz de publicar más información para ayudar a explicar.

Los mejores deseos,

Respondida el 18/12/2018 a las 11:13
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more