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

420
Vistas
Optimización de Python de bucles dobles anidados con pandas

¿Cómo se optimizan los bucles for anidados? digamos que tengo dos tablas de datos con diferentes fechas y horas. Suponga que las fechas y horas están ordenadas en orden. La primera tabla tiene una fecha y hora, la segunda tabla tiene start.datetime y end.datetime entre otras columnas.

Puedo hacer los primeros bucles para la primera tabla y el segundo bucle para ver si el elemento en el primer bucle está entre start.datetime y end.datetime; si es así, escribe una fila en el programa. Luego, pasa al siguiente elemento en el primer ciclo. Como estoy codificando en python y es iteración, no creo que se pueda aplicar la programación dinámica (solo sé memorización), pero ¿hay alguna forma de optimizar? Supongo que mi código es tiempo = O (n ^ 2) ya que necesito hacer un bucle dos veces y espacio = O (n).

También debo asegurarme de que se eliminen los duplicados si el usuario carga exactamente la misma primera tabla. El tiempo para ejecutar el código puede ser corto, pero dado que mi csv resultante contiene una gran cantidad de datos (como 2 o 3 años de datos), planeo optimizarlo en la medida de lo posible.

 #open new file using writer. write first row headings. then do a comparision and #only select those when lotstarttime is later than starttime, lotstarttime earlier than lotendtime #i is start time index and j is the lot time index with open(outfile, 'a', newline ='') as h: writer = csv.writer(h) if os.stat(outfile).st_size == 0: writer.writerow(('Start TimeStamp', 'Alarm_text', 'Package', 'Recipe', 'Lot_starttime', 'UL/L', 'Network')) for i in range(0,len(Start_time)): for j in range(0,len(Lot_starttime)): if Start_time[i] > Lot_starttime[j] and Start_time[i] < Lot_endtime[j]: writer.writerow((Start_time[i], Alarm_text[i], Package[i], Recipe[j], Lot_starttime[j],Unload_Load[j],Network[j])) #removes duplicate row keeping only first occurences #sorts according to time; earliest first df = pd.read_csv(outfile) df.drop_duplicates(keep = 'first',inplace = True) df['Start TimeStamp'] = pd.to_datetime(df['Start TimeStamp']) df.sort_values(by='Start TimeStamp', inplace = True) df.to_csv(outfile, index=False) end = time.time() print(f'Duration of code for {first_excel}, {sheet_name} is {round((end - start),2)}seconds.') merge_data(first_excel,'A','AAA_Performance_Lot(2022)_N1.2.csv','A_AAA.csv')

La salida es como

`¿Cuál es el nombre de su archivo de Excel?: 2362022

La duración del código para A.xlsx, AAA es de 2,24 segundos.

...

Completado`

Gracias.

about 4 years ago · Santiago Trujillo
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