Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
dividir la progresión geométrica de manera eficiente en Python (forma Pythonic)

Estoy tratando de lograr un cálculo que involucre progresión geométrica (división). ¿Hay alguna forma efectiva/eficiente de hacerlo? El conjunto de datos tiene millones de filas. Necesito la columna "Traded_quantity"

Marcador Acción cantidad_negociada
2019-11-05 09:25 0 0
09:35 2 COMPRAR 3
09:45 0 0
09:55 1 COMPRAR 4
10:05 0 0
10:15 3 COMPRAR 56
10:24 6 COMPRAR 8128

tortuga = 2 (Definido por el usuario)

base_quantity = 1 (definido por el usuario)

 def turtle_split(row): if row['Action'] == 'BUY': return base_quantity * (turtle ** row['Marker'] - 1) // (turtle - 1) else: return 0 df['Traded_quantity'] = df.apply(turtle_split, axis=1).round(0).astype(int)

Cálculo

Para la fila 0, Traded_quantity debe ser cero (porque el marcador es cero)

Para la primera fila, la cantidad negociada debe ser (1x1) + (1x2) = 3 (el marcador 2 se dividirá en 1 y 1, el primero 1 se multiplicará con la cantidad base>>1x1, el segundo 1 se multiplicará con el resultado del primer 1 veces tortuga>>1x2), luego hacemos una suma de estos dos números)

Para la segunda fila, Traded_quantity debe ser cero (porque el marcador es cero)

Para la 3.ª fila, la cantidad negociada debe ser (2x2) = 4 (el marcador 1 se multiplicará con la última división de la tortuga de tiempo de la fila 1, es decir, 2x2)

Para la cuarta fila, Traded_quantity debe ser cero (porque el marcador es cero)

Para la quinta fila, la cantidad negociada debe ser (4x2)+(4x2x2)+(4x2x2x2) = 56 (el marcador 3 se dividirá en 1, 1 y 1, el primero 1 se multiplicará con la última división de la fila 3 por la tortuga >> 4x2, El segundo 1 se multiplicará con el resultado del primer 1 con tortuga>>8x2), el tercer 1 se multiplicará con el resultado del segundo 1 con tortuga>>16x2) luego hacemos una suma de estos tres números)

Para la sexta fila, la cantidad negociada debe ser (32x2)+(32x2x2)+(32x2x2x2)+(32x2x2x2x2)+(32x2x2x2x2x2) = 8128

Siempre que haya una COMPRA, la cantidad negociada se calculará utilizando el último lote de Traded_quantity multiplicado por tortuga.

Resulta que el código está generando Traded_quantity correcto cuando no hay cero en Marker. Una vez que haya una brecha con un par de ceros, la progresión geométrica no ayudará, necesitaría la figura anterior (de Cache) para volver a calcular Traded_q. probé con lru_cache para la recursividad, no funcionó.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esto debería funcionar

 def turtle_split(row): global base_quantity if row['Action'] == 'BUY': summation = base_quantity * (turtle ** row['Marker'] - 1) // (turtle - 1) base_quantity = base_quantity * (turtle ** (row['Marker'] - 1))*turtle return summation else: return 0
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda