¿Cómo capturar datos dentro de un marco de tiempo determinado basado en un intervalo de una hora?
Sigo aprendiendo Python y a veces mi código no es muy eficiente. Estoy buscando una forma más eficiente de agrupar adecuadamente los datos de entrada por “hora”. Esto es para medir la producción cada hora, no un promedio de la producción por hora (Sí, sé que esto sería mucho más simple). Para dar un ejemplo, si hice algo 32 veces entre las 4:30-5:30 y entre las 5:30-6:30 hice 58 y eso fue todo para el día, estos dos períodos de tiempo no serían un promedio de producción por hora, sino que se mantendrían estáticos, que es lo que necesito. Los períodos de tiempo en los que debe encajar son (4:30-5:30, 5:30-6:30, 6:30-7:30, 7:30-8:30, 8:30-9:30, 9:30-10:30, 11:00-12:00, 12:00-1:00, 1:00-2:00, 2:00-3:00, 3:00-4:00, 4:00-5:00, 5:00-6:00, 6:00-7:00, 7:30-8:30, 8:30-9:30, 9:30-10:30, 10:30-11:30, 11:30-12:30, 12:30-1:30). Ya tengo una interfaz gráfica de usuario para ingresar datos en Excel. Tengo dos columnas etiquetadas como “Time” y “Date”, Time es donde manipulo la hora y los minutos.
alist = [2,3,4,5,6,7,8,9,10,11]
blist = [11,12,13,14,15,16,17,18,19]
c_list = [19,20,21,22,23,0]
date = dt.datetime.now()
hm = float(date.strftime('%H.%M'))
hour = float(date.strftime('%H'))
hour = float(5) #testing
hm = float(5.30) #testing
for i in alist:
if hour in alist:
if hour < 5:
hour = 5
a = "{:.2f}".format(hour)
print(f'Test 1:{a}')
break
if hour+.5 >= 5.5 and hour <10:
if hm >= hour +.3:
a = "{:.2f}".format(hour+1)
print(f'Test 2: {a}')
else:
a = "{:.2f}".format(hour)
print(f'Test 3: {a}')
if hour >= 10:
hour = 10
a = "{:.2f}".format(hour)
print(f'Test 4: {a}')
break
Aún no he añadido ningún código para la otra lista. Estoy buscando mejores ideas que las que tengo aquí. Pensé en rangos de fechas pero podría complicarse. Aquí hay una imagen de referencia de dos de las columnas:
davy.ai
Un enfoque posible podría ser usar pandas para agrupar las entradas por hora y luego calcular la suma de producción dentro de cada hora. Aquí hay un código de ejemplo que demuestra este enfoque:
Este código asume que los datos de su archivo de Excel se almacenan en un archivo llamado
data.xlsx
y contiene columnas con los nombresTime
yProduction
. El código lee los datos usando pandas, convierte la columnaTime
al formato datetime y extrae la hora, define una lista de rangos de horas y sus etiquetas correspondientes, agrupa los datos por hora y calcula la suma de producción dentro de cada hora, asigna los índices de hora a etiquetas de hora, restablece el índice para crear columnas paraTime
yProduction
, convierte la columnaTime
nuevamente al formato de cadena y finalmente imprime el dataframe resultante.Tenga en cuenta que este enfoque asume que hay al menos una entrada dentro de cada rango de hora. Si faltan horas, el dataframe resultante tendrá valores NaN para esas horas. Para manejar este caso, podría usar el método
reindex
de pandas para agregar las horas faltantes con valores de producción igual a 0.