Saltar al contenido

Retornos logarítmicos en el marco de datos de pandas

Nuestro equipo redactor ha pasado horas investigando para dar espuestas a tu interrogante, te dejamos la soluciones así que deseamos resultarte de gran ayuda.

Solución:

Aquí hay una forma de calcular el retorno de registro usando .shift(). Y el resultado es similar pero no igual a la rentabilidad bruta calculada por pct_change(). ¿Puede cargar una copia de sus datos de muestra (enlace compartido de Dropbox) para reproducir la inconsistencia que vio?

import pandas as pd
import numpy as np

np.random.seed(0)
df = pd.DataFrame(100 + np.random.randn(100).cumsum(), columns=['price'])
df['pct_change'] = df.price.pct_change()
df['log_ret'] = np.log(df.price) - np.log(df.price.shift(1))

Out[56]: 
       price  pct_change  log_ret
0   101.7641         NaN      NaN
1   102.1642      0.0039   0.0039
2   103.1429      0.0096   0.0095
3   105.3838      0.0217   0.0215
4   107.2514      0.0177   0.0176
5   106.2741     -0.0091  -0.0092
6   107.2242      0.0089   0.0089
7   107.0729     -0.0014  -0.0014
..       ...         ...      ...
92  101.6160      0.0021   0.0021
93  102.5926      0.0096   0.0096
94  102.9490      0.0035   0.0035
95  103.6555      0.0069   0.0068
96  103.6660      0.0001   0.0001
97  105.4519      0.0172   0.0171
98  105.5788      0.0012   0.0012
99  105.9808      0.0038   0.0038

[100 rows x 3 columns]

Los rendimientos logarítmicos son simplemente el logaritmo natural de 1 más el rendimiento aritmético. Entonces, ¿qué tal esto?

df['pct_change'] = df.price.pct_change()
df['log_return'] = np.log(1 + df.pct_change)

Aún más conciso, utilizando la sugerencia de Ximix:

df['log_return'] = np.log1p(df.price.pct_change())

Una sola línea, y solo calculando registros una vez. Primero convierta a espacio logarítmico, luego tome la diferencia de 1 período.

    np.diff(np.log(df.price))

En versiones anteriores de numpy:

    np.log(df.price)).diff()

Puntuaciones y reseñas

Nos encantaría que puedieras recomendar esta noticia si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *