es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    def estrategia_XP(data):
        #Capital inicial
        START = 1000
        data['Change'] = data['Close'].pct_change()
        data['Portfolio'] = START + (START * data['Change'].cumsum())
    
        columnas = ['Close', 'Change', 'Portfolio']
        return data[columnas]
    

    En lugar de usar shift, utiliza cumsum 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.

Comments are closed.