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.

¿Cómo puedo encontrar la segunda salida más pequeña para mi función?

Utilicé esta función para encontrar la mayor caída en dólares para la columna de mi marco de datos con precios de acciones. Necesito ayuda para descubrir cómo obtener la salida siguiente X. Básicamente, el plan es juntar esas salidas en un nuevo marco de datos para obtener las X mayores caídas dentro de mi marco de datos.

Pregunta principal:
¿Cómo puedo recorrer las X mayores caídas, empezando por la mayor caída y encontrando las X siguientes caídas más grandes?

def maxdrop(p):
    bestdrop = 0
    wheredrop = -1,-1
    i = 0
    while i < len(p) - 1:
        if p[i+1] < p[i]:
            bestlocal = p[i+1]
            wherelocal = i+1
            j = i + 1
            while j < len(p) - 1 and p[j + 1] < p[i]:
                j += 1
                if p[j] < bestlocal:
                    bestlocal = p[j]
                    wherelocal = j
            if p[i] - bestlocal > bestdrop:
                bestdrop = p[i] - bestlocal
                wheredrop = i, wherelocal
            i = j+1
        else:
            i += 1
    return bestdrop, wheredrop
maxdrop(df1['price'])

Aquí está la salida actual del código:

(782.5300000000001, (1640, 1657))
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recorrer los X retrocesos más grandes, podrías usar un bucle for con el rango(X) y llamar a la función maxdrop con la entrada adecuada para cada iteración. Comenzarías pasando la columna completa de precios de las acciones para la primera iteración, lo cual devolvería el retroceso más grande y su ubicación. Luego, para cada iteración subsiguiente, pasarías la parte de la columna hasta la ubicación del retroceso anterior como nueva entrada, de manera que la función solo considere los retrocesos que ocurrieron antes del anterior. Repetirías este proceso durante X iteraciones, añadiendo la salida de cada iteración a una lista o un nuevo dataframe. Esto te daría los X retrocesos más grandes, en orden de mayor a menor.

Comments are closed.