Pandas: crea una nueva columna basada en las tasas de crecimiento porcentual de otra columna.
Estoy bastante seguro de que estoy luchando con algo muy simple, pero necesito ayuda…
Estoy tratando de agregar en la columna “Portfolio” los valores totales de las acciones basados en su desarrollo diario de precios:
Fecha | Cierre | Cambio | Portfolio |
---|---|---|---|
2018-12-27 | 10381.509766 | NaN | 1000.000000 |
2018-12-28 | 10558.959961 | 0.017093 | 1017.092908 |
2019-01-02 | 10580.190430 | 0.002011 | 1002.010659 |
2019-01-03 | 10416.660156 | -0.015456 | 984.543731 |
2019-01-04 | 10767.690430 | 0.033699 | 1033.698927 |
Por lo tanto, estoy utilizando la siguiente función:
def XP_strategy(data):
#Capital inicial
START = 1000
data[‘Cambio’] = data[‘Cierre’].pct_change()
data[‘Portfolio’] = START
data.loc[1:, ‘Portfolio’] = data[‘Portfolio’].shift(1) * (1 + data[‘Cambio’])
columnas = ['Cierre', 'Cambio', 'Portfolio']
return data[columnas]
Como puedes ver, no puedo aplicar la fórmula para el Portfolio en un día basado en el día anterior. ¿Hay alguien que pueda ayudarme, por favor?
davy.ai
Parece que el problema está en la línea
data.loc[1:, 'Portfolio'] = data['Portfolio'].shift(1) * (1 + data['Change'])
.En lugar de desplazar toda la columna ‘Portfolio’, solo debes desplazar el valor del día anterior. Aquí tienes una versión modificada de la función que debería funcionar:
En lugar de usar
shift
, utilizacumsum
para calcular el cambio total en el precio desde el punto de inicio, y luego lo suma al capital inicial para obtener el valor actual de la cartera. Esto debería darte el resultado deseado.