Tengo dos DataFrames como los siguientes:
Dividendos:
Ticker1 Ticker2 Ticker3
2018-01-01 NaN NaN 0.39
2018-01-02 0.8 0.73 NaN
2018-01-04 NaN NaN NaN
... ... ... ...
Precio al contado (semanal):
Ticker1 Ticker2 Ticker3
2018-01-01 16.95 8.54 21.05
2018-01-08 16.80 9.03 20.56
2018-01-15 16.86 9.52 19.85
... ... ... ...
Me gustaría calcular los rendimientos semanales de estas acciones (10Y+ histórico) teniendo en cuenta los dividendos. Me habría limitado a sumar los dos dataframes y registrar los rendimientos pero mis fechas no se alinean exactamente.
Mi solución actual es hacer un bucle a través del DateTimeIndex
del marco de datos del precio al contado y encontrar el más cercano a él en el marco de datos de los dividendos utilizando .loc
y añadirlo si no es nulo. Aunque funciona, es muy lento incluso cuando se hace un bucle a través de las matrices numpy subyacentes en lugar de los objetos de marco de datos reales.
Por lo tanto, mi pregunta ¿existe una forma eficiente de obtener el último dividendo conocido más cercano y añadirlo a mi marco de datos de precios al contado antes de calcular los rendimientos?
Solución temporal
He encontrado un método de pandas que no conocía llamado pandas.merge_asof y aunque es muy lento, produce el resultado esperado en Python puro y mejora la legibilidad del código base.