Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!