Python - Promediar valores de una columna de DataFrame en intervalos de cinco minutos

 
Vista:
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por María (22 intervenciones) el 20/07/2020 17:37:12
Hola,

Tengo el siguiente problema:

Tengo un dataframe en el que despues de trabajar con el código he conseguido tener una columna que llamo Total M (se trata de una suma de minutos). Esta columna la tengo que promediar por intervalos de cinco minutos.
El primer intervalo iria por ejemplo de 0 a 4:59 minutos, el siguiente de 5 a 9:59 minutos y asi sucesivamente.
Pero no soy quien de hacerlo. ¿Alguien puede ayudar por favor?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data_df4={}
data_df4['SaM']=np.array(data_df3['S'].values, dtype=float)/60
data_df4['HaM']=np.array(data_df3['H'].values, dtype=float)*60
data_df4['M']=data_df3['M']
data_df4['Total M']=(data_df4['SaM']+data_df4['HaM']+data_df3['M'].astype(np.float))
data_df4=pd.DataFrame(data_df4)
 
#Crea bucle para hacer el promedio de grupos de cinco minutos
#for i in range(0,len(data_df4)):
i=0
data_df5={}
while data_df4.iloc[i,'Total M']<5:
    data_df5['promedio']=np.array(data_df4[i,'Total M'].values,dtype=float)/i+data_df5['promedio']
    i=i+1
    print (data_df5)

Muchas gracias
Un saludo,
María R.P.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por María (22 intervenciones) el 20/07/2020 18:30:37
He de añadir que lo que hay que promediar en verdad es el valor correspondiente a cada tiempo es decir, para cada intervalo de conco minutos, hay cinco valores de otra columna donde esta la presión, asi pues lo que hay que promediar son las presiones que hay en el cada intervalo de cinco minutos.De esta manera deberia salir un valor de presión a las 00:05 otro a las 00:10 ect

Gracias y disculpen
María R.P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Daniel (111 intervenciones) el 20/07/2020 19:34:23
Hola,

Creo que se puede solucionar con las funciones de tratamiento de series temporales de pandas y una posterior selección de las filas necesarias.

1
2
df = pd.DataFrame({'X':range(10)})
df.rolling(5).mean().loc[5-1::5]

Lo único que puede quedar es una realineación de los índices con los valores necesarios

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Maria (22 intervenciones) el 20/07/2020 19:46:29
Gracias pero con eso, parece (ojo, que soy muuuuy novel con python y estoy aprendiendo por mi cuenta), que sólo se hace un primer intervalo. Y mi fichero es muuuuy largo.

La cuestión es que tengo una columnas con el tiempo en minutos, para cada momento tengo una medición de presión. Pues bien, quiero promediar la presión en intervalos de cinco minutos. Primero promediar los primeros cinco, despues que promedie las medidas de presión correspondientes a los siguientes cinco minutos y asi sucesivamente. Notar que el primer intervalo acabaria por ejemplo en 4:59minutos, los 5 minutos ya serian del.siguiente intervalo hasta llegar a los 9:59minutos.

Gracias de todos modos.
María R.P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Daniel (111 intervenciones) el 20/07/2020 20:26:53
Hola,

Lo que hace el código es:

Rolling – crea una ventana de cada 5 valores (de 1 a 5, de 2 a 6, …)
Mean – calcula la media de cada ventana

Esto lo que hace es una media de los valores para todos los puntos, como se quiere cada 5 intervalos se seleccionar los valores dese la posición 4 hasta el final en pasos de cinco.

Solo hay que cambiar el 5 por le número de medidas que correspondan a 5 minutos.

Lo único que se asume es que el número de muestras por minuto es constante, lo que es normal en las series temporales. Sino se tendrá que hacer a mano.

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Maria (22 intervenciones) el 20/07/2020 21:06:34
Hola,

Muchisimas gracias pero...tengo que analizarlo. Es dificil para mi. Si soy quien de hacerlo, ya lo comento. Tal vez te guste ya saber si lo saqué jaja

Un saludo,
María R.P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por María (22 intervenciones) el 21/07/2020 18:54:20
Hola,

Ya aprendí a usar un poco la función rolling pero me he dado cuenta de que te guarda todo y yo sólo quiero los promedios cada cinco minutos. Por intervalo de cinco minutos necesito hacer un promedio de presión. Así por cada cinco minutos tengo una medición de presión.
Y llevo buscado mucho pero no me sale. Al final lo que he hecho ha sido un fichero excel, donde tengo el tiempo y la presión, pero tengo mas presiones de las que necesito. Sólo deberían aparecer las presiones correspondientes al promedio de cada cinco minutos.

Parte de lo que sale en la pantalla al correr el código:

P_10Hz_Mean
LMST
2020-07-21 00:00:00.048 738.716500
2020-07-21 00:00:00.145 738.709650
2020-07-21 00:00:00.243 738.706133
2020-07-21 00:00:00.340 738.706400
2020-07-21 00:00:00.437 738.709640
...
2020-07-21 01:14:36.712 739.404569
2020-07-21 01:14:36.809 739.404519
2020-07-21 01:14:36.907 739.404464

¿Podría por favor alguien ayudar? Se lo agradecería.

Parte del código que tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#------------------------------------------------------------------------------
#            Función rolling
#------------------------------------------------------------------------------
data_df.index = pd.DatetimeIndex(data_df['LMST'],dtype='datetime64[ns]', freq='infer')
#del data_df['LMST']
data_df.rename(columns={'P_10Hz':'P_10Hz_Mean'},inplace=True)
# Se pretende hacer promedios de 5m lo que es lo mismo que 300s
result = data_df.rolling('300s').mean()
print('\n'+'Promedio cada cinco minutos (300 s)'+'\n'+str(result))
#------------------------------------------------------------------------------
#        Crear y escribir un Excel
# LOs resultados de la función rolling les escribe en un Excel
#------------------------------------------------------------------------------
writer = ExcelWriter('/home/maria/Escritorio/PromedioPresioncada5m.xls')
data_df.to_excel(writer,'presionPromedio',index=False)
writer.save()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por María (22 intervenciones) el 21/07/2020 19:26:37
Gracias, pero lo que usted dice me da error. Eso de loc ya aprendí algo hace unos días pero no entiendo bien como usarlo aqui.

1
2
# Se pretende hacer promedios de 5m lo que es lo mismo que 300s
result = data_df.rolling('300s').loc[5-1::5].mean()

y no le entiendo bien su respuesta pues no puedo poner :n y tampoco un valor concreto que sustituya al n.
En un inicio yo parto de un conjunto de datos que consiste en la medición de presiones durante 24 horas. Luego 24 horas por 60 son un total de 1440 minutos, divididos en intervalos de cinco minutos tengo 288. Con lo cual lo único que tengo que tener son 288 mediciones (las promedio) de presión.

Muchas gracias
Un saludo,
María R.P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Daniel (111 intervenciones) el 21/07/2020 19:36:26
Primero, loc va despues de mean ya que se tiene que hacer el promedio antes.

Si se hace una medida cada 30 segundos el valor de n es 10, si se hace cada 10 segundos es 30,... el número de medidas por minuto por los cinco munutos.

Si las medidas no se hace en un intervalo regular, no es una serie temporal y no se puede usar las funciones de pandas para ello. En tal caso el problema es más complicado y hay que escribir bastante código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por María (22 intervenciones) el 21/07/2020 19:52:38
Tengo que repetirlo porque no son regulares los intervalos. Pero gracias.
Menuda faena
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Promediar valores de una columna de DataFrame en intervalos de cinco minutos

Publicado por Daniel (111 intervenciones) el 25/07/2020 18:10:41
Hola,

Quizás la combinación de estos dos pasos te pueda ayudar:

En este enlace puede encontrar una función con la que redondear las fechas: https://stackoverflow.com/questions/3463930/how-to-round-the-minute-of-a-datetime-object

Luego si lo redondeas a 5 minutos, el resultado se puede obtener mediante una tabla dinámica: https://www.analyticslane.com/2018/11/23/tablas-dinamicas-en-python-con-pandas/


Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar