Tengo una tabla donde en la primera columna hay números enteros (7,8,17,467, etc.) que indican los segundos y en la otra columna tengo el número de paquetes entregados en esos segundos. Me gustaría sumar todos los paquetes que ocurren cada segundo en un rango de 10 segundos. Por lo tanto, me gustaría tener la cantidad de paquetes después de cada 10 segundos, por ejemplo, para tener una mejor visualización del problema. Un problema es que no tengo paquetes en cada segundo pero, por ejemplo, en el segundo número 5 no tengo paquetes y la fila con el tiempo = 5 no existe.

Alguien tiene algunas sugerencias?

rpl_dio = data.loc[data['MessageLabel'] == 0]
rpl_dio['Time'] = rpl_dio['Time'].astype(int)
rpl_dio_total = rpl_dio.groupby('Time')['MessageLabel'].count().reset_index(name='PackTime')
rpl_dio_total = rpl_dio_total.sort_values(by='Time',ascending=True)

plt.figure(figsize=(15,9))
plt.plot(rpl_dio_total['Time'],rpl_dio_total['PackTime'])
plt.title( "DIO packets rate" )
plt.ylabel( "Number of packets" )
plt.xlabel( "Time [s]" )
plt.show()
0
FraMan 10 may. 2019 a las 00:02

3 respuestas

La mejor respuesta

Primero agregaría una nueva columna con Timestamp (ponga su fecha), y luego la combine con un timedelta de los segundos

df['Seconds'] = pd.Timestamp('2019/01/01 00:00:00') + pd.to_timedelta(df['Time'], unit='s')

Out[61]: 
   Time  PackTime             Seconds
0     7        32 2019-01-01 00:00:07
1     9        53 2019-01-01 00:00:09
2    10        34 2019-01-01 00:00:10
3    11        53 2019-01-01 00:00:11
4    12        34 2019-01-01 00:00:12

Y establezca la columna 'Seconds' como su índice

df.set_index('Seconds', inplace=True)
Out[62]: 
                     Time  PackTime
Seconds                            
2019-01-01 00:00:07     7        32
2019-01-01 00:00:09     9        53
2019-01-01 00:00:10    10        34
2019-01-01 00:00:11    11        53
2019-01-01 00:00:12    12        34

Ahora puede usar el método resample() donde '10S' es 10 segundos

df['PackTime'].resample('10S').sum()

 Out[63]: 
 Seconds
 2019-01-01 00:00:00     85
 2019-01-01 00:00:10    121
 Freq: 10S, Name: PackTime, dtype: int64
2
Mark 10 may. 2019 a las 14:07

Esta es una pequeña parte del conjunto de datos.

enter image description here

0
FraMan 10 may. 2019 a las 08:51

Intente a continuación:

pd.cut(df.Time, bins=np.arange(0, 100, 10)).groupby('Time').count()

0
hacker315 10 may. 2019 a las 09:06